#!/bin/sh -l
#
# PLD-UP,v 0.24 2002/04/25 15:15:00 AdGor
#

# Okrel rdo podstawowe i opcjonalne

source1="ftp://ftp.pld.org.pl/dists/ra/PLD/`arch |sed 's/i486/i386/'`/PLD/RPMS/"
#source1="ftp://ftp.pld.org.pl/dists/ra/updates/`arch |sed 's/i486/i386/'`/"
source2="ftp://ftp.pld.org.pl/dists/ra/test/`arch |sed 's/i486/i386/'`/"

# Tutaj moesz zdefiniowa tre niektrych komunikatw

upimsg="Uaktualniam indeksy ..."
vpmsg="Szukam pakietw do uaktualnienia ..."
uppmsg="Uaktualniam pakiety ..."
toup="Nastpujce pakiety wymagaj uaktualnienia:"
allup="Nie ma nowych pakietw"
endmsg="Nacinij 'k' a potem ENTER by zakoczy"
errmsg="Nie rozumiem"
ntderrmsg="Co nie tak:" 

tn="\t\t\t [ (t)ak (n)ie ]"
tnk="\t\t\t [ (t)ak (n)ie (k)oniec ]"
npk="\t\t\t [ (n)ie (p)opraw (k)oniec ]"

# Okrel nazw i lokalizacj pliku tymczasowego
# (tworzonego na chwil podczas dziaania pldup)

tmpfile1="$HOME/tmp/pldup.todo1"
tmpfile2="$HOME/tmp/pldup.todo2"
####

# Okrel nazw i lokalizacj pliku
# konfiduracyjnego uytkownika

if printenv |grep -q "CONFIG_DIR=" && [ -d $HOME/$CONFIG_DIR ]; then
    usrcfg=$HOME/$CONFIG_DIR/pldupsrcs
else
    usrcfg=$HOME/.pldupsrcs
fi        
####

pok()
{
echo
echo "\t [p] Aktualizuj tylko z $src1"
echo "\t [o] Aktualizuj z $src1"
echo "                  i $src2" 
echo "\t [k] Zakocz"
}



endnow()
{
end1=

while [ x$end1 = x ]; do
echo
echo "Zakoczy teraz?"
echo $tn
read endreply1
    case $endreply1 in
	t|tak|N|NIE)
	        exit 0
		;;
	n|nie|N|NIE)
	        end1=1;
		;;
	*)
	        echo $errmsg
		;;
    esac
done
}

endnow2()
{
end2=

while [ x$end2 = x ]; do
echo
echo $endmsg
read endreply2
    case $endreply2 in
	k|K)
	    exit 0
	    ;;
    esac
done
}

endnow3()
{
echo
echo "Nacinij ENTER by zakoczy"
    read
    exit 0
}

pskipped()
{
if cat $tmpfile |grep -q ": pomijam"; then
echo
echo "Pakiety wykluczone w /etc/poldek.conf to:"
echo
cat $tmpfile |grep ": pomijam" |sed 's/: pomijam wstrzymany (hold) pakiet//'
fi
}

pmarks()
{
if cat $tmpfile |grep -q " wymaga "; then
echo
echo "Pakiety, ktre bd doinstalowane w celu spenienia zalenoci:"
echo
cat $tmpfile |grep " wymaga "
fi
}

showtd()
{
echo
echo $toup
echo
cat $tmpfile |grep "zostanie zast"
pskipped
pmarks
}

ntodo()
{
pskipped
echo
echo $allup
}

ntodoerr()
{
echo
showtd
echo
echo $ntderrmsg
cat $tmpfile |grep "bd:"
}


###

if [ -a $usrcfg ] && cat $usrcfg |grep -q ^source1; then
	src1=`cat $usrcfg |grep ^source1 |cat -n |sed 's/ //g' |grep ^1 \
	|sed 's/[^ ]\+=//'`
elif [ -a /etc/pldupsrcs ] && cat /etc/pldupsrcs |grep -q ^source1; then
	src1=`cat /etc/pldupsrcs |grep ^source1 |cat -n |sed 's/ //g' |grep ^1 \
	|sed 's/[^ ]\+=//'`
elif cat /etc/poldek.conf |grep ^source |grep -v ",noauto" |cat -n \
|sed 's/ \+//' |grep -q ^1; then
	src1=`cat /etc/poldek.conf |grep ^source |grep -v ",noauto" |cat -n \
	|sed 's/ \+//' |grep ^1 |sed 's/1[^ ]source//' |sed 's/=//' \
	|sed 's/[^ ]\+//' |sed 's/ //g'`
else
	src1=$source1
fi

if [ -a $usrcfg ] && cat $usrcfg |grep -q ^source2; then

	src2=`cat $usrcfg |grep ^source2 |cat -n |sed 's/ //g' |grep ^1 \
	|sed 's/[^ ]\+=//'`
elif [ -a /etc/pldupsrcs ] && cat /etc/pldupsrcs |grep -q ^source2; then
	src2=`cat /etc/pldupsrcs |grep ^source2 |cat -n |sed 's/ //g' |grep ^1 \
	|sed 's/[^ ]\+=//'`
elif cat /etc/poldek.conf |grep ^source |grep -v ",noauto" |grep -q -v $src1; then
	src2=`cat /etc/poldek.conf |grep ^source |grep -v ",noauto" |grep -v $src1 \
	|cat -n |sed 's/ \+//' |grep ^1 |sed 's/1[^ ]source//' |sed 's/=//' \
	|sed 's/[^ ]\+//' |sed 's/ //g'`
elif cat /etc/poldek.conf |grep ^source |grep -q -v $src1; then
	src2=`cat /etc/poldek.conf |grep ^source |grep -v $src1 \
	|cat -n |sed 's/ \+//' |grep ^"1	" |sed 's/1[^ ]source//' |sed 's/=//' \
	|sed 's/[^ ]\+//' |sed 's/ //g'`

else
	src2=$source2
fi

if  cat /etc/poldek.conf |grep -q ^cachedir; then
    cachedir=`cat /etc/poldek.conf |grep ^cachedir |sed 's/cachedir//' |sed 's/=//' \
    |sed 's/ //g'`
elif
    echo $TMPDIR |grep -q ^"/"; then
    cachedir=`echo $TMPDIR`
else
    if [ X`id -un` = Xroot ] && [ X$HOME != X"/root" ]; then
	cachedir=`cat /etc/passwd |grep ^root \
	|sed 's/root:[^:]\+:\w\+:\w\+:[^:]\+://' \
	|sed 's/:[0- \!-\/]\+//'`"/.poldek-cache"
    else
	cachedir="$HOME/.poldek-cache"
    fi
fi

###

# No to zaczynamy

echo
echo "\t *****************************************************************"
echo "\t *                                                               *"
echo "\t *                        Witaj w PLD-UP!                        *"
echo "\t *                                                               *"
echo "\t *       Za chwil uaktualni pakiety w Twoim systemie           *"
echo "\t *                                                               *"
echo "\t *****************************************************************"

asksrc2=

while [ x$asksrc2 = x ]; do
    echo
    echo "Czy sprawdzi $src2 ?"
    echo
    echo $tnk
    read reply
    case $reply in
	    n|nie|N|NIE)
		    echo
		    echo "$src2 nie zostanie sprawdzone"
		    echo
		    echo $upimsg
		    echo
		    asksrc2=1
		    ;;
	    t|tak|T|TAK)
		    echo
		    echo "Sprawdz rwnie $src2"
		    echo
		    echo $upimsg
		    echo
		    asksrc2=1;
		    src2true="1"
		    ;;
	    k|koniec|K|KONIEC)
		    endnow
		    ;;
		*)
		    echo $errmsg
		    ;;
    esac
done

poldek --update -s $src1

if [ X$src2true = X1 ]; then
poldek --update -s $src2
fi

if  echo $src1 |grep -q ^"/"; then
    src1lc="-s $src1"
else
    src1lc="-s $cachedir/`echo "$src1/" |sed 's/:/_/' |sed 's/[/][/]//g' \
    |sed 's/[/]/./g'`/packages.dir.gz --prefix=$src1"
fi

if [ X$src2true = X1 ]; then
    if  echo $src2 |grep -q ^"/"; then
	src2lc="-s $src2"
    else
	src2lc="-s $cachedir/`echo "$src2/" |sed 's/:/_/' |sed 's/[/][/]//g' \
	|sed 's/[/]/./g'`/packages.dir.gz --prefix=$src2"
    fi
fi

poldek -v --upgrade-dist --test $src1lc >$tmpfile1

if [ X$src2true = X1 ]; then
poldek -v --upgrade-dist --test $src2lc >$tmpfile2
fi

echo
echo "*****************"
echo "Sprawdziem $src1"
tmpfile=$tmpfile1    

if  cat $tmpfile |grep -q "zostanie zast" && ! cat $tmpfile |grep -q "bd:"; then
    showtd
    todo1=1
    todo=1
elif
    cat $tmpfile |grep -q "bd:"; then
    ntodoerr
else
    ntodo
fi

if [ X$src2true = X1 ]; then
    echo
    echo "*****************"
    echo "Sprawdziem $src2"
    tmpfile=$tmpfile2
    if  cat $tmpfile |grep -q "obsoleted by"; then
    	showtd
        todo2=1
        todo=1
    else
        ntodo
    fi
fi

rm -f $tmpfile1 $tmpfile2

if [ X$todo = X1 ]; then
    if [ X$todo1 = X1 ] && [ X$todo2 = X1 ]; then
	
	continue=
	while [ x$continue = x ]; do
	    echo
	    echo "Co dalej?"
	    pok
	    read reply
	    case $reply in
		p|P)
	    	    continue=1
		    dowith1=1
		    ;;
		o|O)
		    continue=1
		    dowith1=1
		    dowith2=1
		    ;;
		k|K)
		    endnow        
		    ;;
		*)
		    echo $errmsg
		    ;;
	    esac
	done
    else

        if [ X$todo1 = X1 ]; then
	    dowith1=1
	else
	    dowith2=1
	fi		

	continue=
	while [ x$continue = x ]; do
	    echo
	    echo "Czy kontynuowa?"	
	    echo $tn
	    read reply
	    case $reply in
		t|tak|T|TAK)
	    	    continue=1
		    ;;
		n|nie|N|NIE)
	            endnow
		    continue=1
		    ;;
		    *)
		    echo $errmsg
		    ;;
	    esac
	done		    
    fi
else
    endnow3
fi        

askhold=

while [ x$askhold = x ]; do
    echo
    echo "Czy wykluczy niektre pakiety?"
    echo
    echo $tnk
    read reply
    case $reply in
	    t|tak|T|TAK)
		    continue2=

		    while [ x$continue2 = x ]; do
			echo
			echo "Podaj nazwy pakietw, ktre chcesz wykluczy"
			echo "(oddzielone przecinkami - bez spacji,dozwolony jest symbol *);"
			echo "lub nacinij ENTER jeli nie chcesz wyklucza adnych pakietw;"
			echo "lub $endmsg"
			echo
			read reply
			case $reply in
			    k|koniec|K|KONIEC)
				endnow
				;;
			    *)
				holdcheck=

				while [ x$holdcheck = x ]; do
				    echo
				    echo "Wykluczone pakiety to:"
				    echo
				    echo $reply
				    echo
				    echo "Czy chcesz dokona poprawek?"
				    echo
				    echo $npk
				    read reply2
				    case $reply2 in
					n|nie|N|NIE)
					    holdcheck=1;
					    continue2=1;
					    askhold=1;
					    holded="--hold=$reply"
					    ;;
					p|popraw|P|POPRAW)
					    holdcheck=1
					    ;;
					k|koniec|K|KONIEC)
					    endnow
					    ;;
					*)
					    echo $errmsg
					    ;;
				    esac
				done
				;;
			esac
		    done
		    ;;
	    n|nie|N|NIE)
		    askhold=1
		    ;;
	k|koniec|K|KONIEC)
		    endnow
		    ;;
	    	*)
		    echo $errmsg
		    ;;
    esac
done

echo
echo $uppmsg

if [ X$dowith1 = X1 ]; then
    poldek -v --upgrade-dist $src1lc $holded
fi

if [ X$dowith2 = X1 ]; then
    poldek -v --upgrade-dist $src2lc $holded
fi

echo
echo "Zrobione"
endnow2

