# HG changeset patch # User Pascal Bellard # Date 1225149156 0 # Node ID 64e13d7d11dbffc823cff8fc77f2fb8a6ba7d6fb # Parent 7e9bd92fa8b51cc021e7bc709e279be91dd7d0f4 Add undigest support diff -r 7e9bd92fa8b5 -r 64e13d7d11db lib/tazpkgbox/list --- a/lib/tazpkgbox/list Sun Oct 26 20:21:13 2008 -0700 +++ b/lib/tazpkgbox/list Mon Oct 27 23:12:36 2008 +0000 @@ -4,13 +4,28 @@ # List mirrored packages using the packages.desc file. # +undigest_list() +{ + IFS="|" + if [ -n "$1" ]; then + cat /var/lib/tazpkg/undigest/$1/packages.desc + else + cat /var/lib/tazpkg/undigest/*/packages.desc + fi 2> /dev/null | sort | while read PACKAGE VERSION SHORT_DESC; do + echo "$PACKAGE|$VERSION|$SHORT_DESC" + done + unset IFS +} + installable_list() { IFS="|" + cat /var/lib/tazpkg/packages.desc \ + /var/lib/tazpkg/undigest/*/packages.desc 2> /dev/null | sort | \ while read PACKAGE VERSION SHORT_DESC; do [ -d /var/lib/tazpkg/installed/${PACKAGE%% *} ] && continue echo "$PACKAGE|$VERSION|$SHORT_DESC" - done < /var/lib/tazpkg/packages.desc 2> /dev/null + done unset IFS } @@ -49,6 +64,13 @@ else installable_list | grep "$CAT" fi ;; + undigest) + set -- `cat /tmp/tazpkgbox/undigest-category` + if [ "$1" == "all" -o "$1" == "" ]; then + undigest_list $2 + else + undigest_list $2 | grep "$1" + fi ;; mirrored) CAT=`cat /tmp/tazpkgbox/mirrored-category` if [ "$CAT" == "all" ]; then @@ -59,7 +81,7 @@ blocked) blocked_list;; *) - echo "Usage: /usr/lib/slitaz/tazpkgbox/list [installed|installable|mirrored|blocked]" ;; + echo "Usage: /usr/lib/slitaz/tazpkgbox/list [installed|installable|mirrored|undigest|blocked]" ;; esac exit 0 diff -r 7e9bd92fa8b5 -r 64e13d7d11db lib/tazpkgbox/package_infos --- a/lib/tazpkgbox/package_infos Sun Oct 26 20:21:13 2008 -0700 +++ b/lib/tazpkgbox/package_infos Mon Oct 27 23:12:36 2008 +0000 @@ -41,8 +41,11 @@ fi if [ "$1" = "list_files_mirror" ]; then - unlzma -c /var/lib/tazpkg/files.list.lzma | grep -- "^$2:" | \ - awk '{ print substr($0,index($0,":")+2) }' + for i in /var/lib/tazpkg/files.list.lzma \ + /var/lib/tazpkg/undigest/*/files.list.lzma ; do + [ -f $i ] || continue + unlzma -c $i + done | grep -- "^$2:" | awk '{ print substr($0,index($0,":")+2) }' exit 0 fi @@ -65,11 +68,16 @@ $i|$VERSION|Installed|$SHORT_DESC " else - RES=`grep "^$i " /var/lib/tazpkg/packages.desc` + RES=`grep -sh "^$i " \ + /var/lib/tazpkg/packages.desc \ + /var/lib/tazpkg/undigest/*/packages.desc` PACKAGE=`echo "$RES" | cut -d "|" -f 1` VERSION=`echo "$RES" | cut -d "|" -f 2` SHORT_DESC=`echo "$RES" | cut -d "|" -f 3` - SIZE=`grep -A 3 "^$(echo $PACKAGE)$" /var/lib/tazpkg/packages.txt | tail -1 | sed 's/.*(\(.*\) .*/\1/'` + SIZE=`grep -sh -A 3 "^$(echo $PACKAGE)$" \ + /var/lib/tazpkg/packages.txt \ + /var/lib/tazpkg/undigest/*/packages.txt | \ + tail -1 | sed 's/.*(\(.*\) .*/\1/'` LIST_PKGS="$LIST_PKGS $i|$VERSION|$SIZE|$SHORT_DESC " @@ -236,13 +244,15 @@ " export PACKAGE_INFOS else - RES=`grep "^$PKG " /var/lib/tazpkg/packages.desc` + RES=`grep -sh "^$PKG " /var/lib/tazpkg/packages.desc \ + /var/lib/tazpkg/undigest/*/packages.desc` PACKAGE=`echo "$RES" | cut -d "|" -f 1` VERSION=`echo "$RES" | cut -d "|" -f 2` SHORT_DESC=`echo "$RES" | cut -d "|" -f 3` CATEGORY=`echo "$RES" | cut -d "|" -f 4` WEB_SITE=`echo "$RES" | cut -d "|" -f 5` - SIZES=`grep -A 3 "^$(echo $PACKAGE)$" /var/lib/tazpkg/packages.txt | tail -1` + SIZES=`grep -sh -A 3 "^$(echo $PACKAGE)$" /var/lib/tazpkg/packages.txt \ + /var/lib/tazpkg/undigest/*/packages.txt | tail -1` PACKAGE_INFOS=" diff -r 7e9bd92fa8b5 -r 64e13d7d11db tazpkg --- a/tazpkg Sun Oct 26 20:21:13 2008 -0700 +++ b/tazpkg Mon Oct 27 23:12:36 2008 +0000 @@ -13,7 +13,7 @@ # Pascal Bellard # Eric Joseph-Alexandre # -VERSION=2.4.1 +VERSION=2.5 #################### # Script variables # @@ -120,7 +120,11 @@ set-release Change release and update packages clean-cache Clean all packages downloaded in cache directory. setup-mirror Change the mirror url configuration. - reconfigure Replay post install script from package." + list-undigest List undigest mirrors. + remove-undigest Remove an undigest mirror. + add-undigest Add an undigest mirror. + setup-undigest Update an undigest mirror. + reconfigure Replay post install script from package." } # Status function with color (supported by Ash). @@ -228,8 +232,11 @@ check_for_package_in_list() { local pkg - pkg=$(grep "^$PACKAGE-[0-9]" $LOCALSTATE/packages.list | head -1) - [ -n "$pkg" ] || pkg=$(grep "^$PACKAGE-.[\.0-9]" $LOCALSTATE/packages.list | head -1) + pkg=$(grep -sh "^$PACKAGE-[0-9]" $LOCALSTATE/packages.list \ + $LOCALSTATE/undigest/*/packages.list | head -1) + [ -n "$pkg" ] || pkg=$(grep -sh "^$PACKAGE-.[\.0-9]" \ + $LOCALSTATE/packages.list \ + $LOCALSTATE/undigest/*/packages.list | head -1) if [ -n "$pkg" ]; then PACKAGE=$pkg else @@ -247,14 +254,27 @@ echo "$DATE - $1 - $PACKAGE ($VERSION$EXTRAVERSION)" >> $LOG } +# Download a file from this mirror +download_from() +{ + local i + local mirrors + mirrors="$1" + shift + for i in $mirrors; do + case "$i" in + http://*|ftp://*) wget -c $i$@ && break;; + *) cp $i/$1 . && break;; + esac + done +} + # Download a file trying all mirrors download() { - for i in $(cat $MIRROR); do - case "$i" in - http://*|ftp://*) wget -c $i$@ && break;; - *) cp $i$1 . && break;; - esac + local i + for i in $(cat $MIRROR $LOCALSTATE/undigest/*/mirror 2> /dev/null); do + download_from "$i" "$@" done } @@ -622,10 +642,12 @@ { echo "Available packages name-version" echo "================================================================================" - if [ -f "$LOCALSTATE/packages.list" ]; then - cat $LOCALSTATE/packages.list | grep -i "$PATTERN" - packages=`cat $LOCALSTATE/packages.list | grep "$PATTERN" | wc -l` - else + packages=0 + for i in $LOCALSTATE/packages.list $LOCALSTATE/undigest/*/packages.list; do + grep -is "$PATTERN" $i + packages=$(($packages + `grep -is "$PATTERN" $i | wc -l`)) + done + if [ ! -f "$LOCALSTATE/packages.list" ]; then echo -e " No 'packages.list' found to check for mirrored packages. For more results, please run 'tazpkg recharge' once as root before searching.\n" @@ -646,10 +668,12 @@ { echo "Matching packages name with version and desc" echo "================================================================================" - if [ -f "$LOCALSTATE/packages.txt" ]; then - cat $LOCALSTATE/packages.txt | grep -A 2 "^$PATTERN" - packages=`cat $LOCALSTATE/packages.txt | grep -i "^$PATTERN" | wc -l` - else + packages=0 + for i in $LOCALSTATE/packages.txt $LOCALSTATE/undigest/*/packages.txt; do + grep -is -A 2 "^$PATTERN" $i + packages=$(($packages + `grep -is "^$PATTERN" $i | wc -l`)) + done + if [ ! -f "$LOCALSTATE/packages.txt" ]; then echo -e " No 'packages.txt' found to check for mirrored packages. For more results, please run 'tazpkg recharge' once as root before searching.\n" @@ -708,6 +732,40 @@ rm -rf $TMP_DIR } +# Update mirror urls +setup_mirror() +{ + # Backup old list. + if [ -f "$1/mirror" ]; then + cp -f $1/mirror $1/mirror.bak + fi + echo "" + echo -e "\033[1mCurrent mirror(s)\033[0m" + echo "================================================================================" + echo " `cat $1/mirror 2> /dev/null`" + echo " +Please enter URL of the new mirror (http, ftp or local path). You must specify +the complete address to the directory of the packages and packages.list file." + echo "" + echo -n "New mirror(s) URL : " + NEW_MIRROR_URL=$2 + if [ -n "$NEW_MIRROR_URL" ]; then + echo $NEW_MIRROR_URL + else + read NEW_MIRROR_URL + fi + if [ "$NEW_MIRROR_URL" = "" ]; then + echo "Nothing has been changed." + else + echo "Setting mirror(s) to : $NEW_MIRROR_URL" + rm -f $1/mirror + for i in $NEW_MIRROR_URL; do + echo "$i" >> $1/mirror + done + fi + echo "" +} + ################### # Tazpkg commands # ################### @@ -951,7 +1009,11 @@ if [ "$3" == "--mirror" ]; then - unlzma -c $LOCALSTATE/files.list.lzma | grep -- ".*:.*$2" | awk ' + match=0 + for i in $LOCALSTATE/files.list.lzma \ + $LOCALSTATE/undigest/*/files.list.lzma; do + [ -f $i ] || continue + unlzma -c $i | grep -- ".*:.*$2" | awk ' BEGIN { last="" } { pkg=substr($0,0,index($0,":")-1); @@ -962,8 +1024,8 @@ } printf("%s\n",file); }' - match=`unlzma -c $LOCALSTATE/files.list.lzma | \ - grep -- ".*:.*$2" | wc -l` + match=$(($match + `unlzma -c $i | grep -- ".*:.*$2" | wc -l`)) + done else @@ -1397,43 +1459,51 @@ # Recharge packages.list from a mirror. # check_root - cd $LOCALSTATE - echo "" - if [ -f "$LOCALSTATE/packages.list" ]; then - echo -n "Creating backup of the last packages list..." - mv -f packages.desc packages.desc.bak 2>/dev/null - mv -f packages.txt packages.txt.bak 2>/dev/null - mv -f packages.list packages.list.bak 2>/dev/null - mv -f packages.equiv packages.equiv.bak 2>/dev/null - mv -f files.list.lzma files.list.lzma.bak 2> /dev/nul - status - fi - download packages.desc - download packages.txt - download packages.list - download packages.equiv - download files.list.lzma - if [ -f "$LOCALSTATE/packages.list.bak" ]; then - diff -u packages.list.bak packages.list | grep ^+[a-z] > packages.diff - sed -i s/+// packages.diff + for path in $LOCALSTATE $LOCALSTATE/undigest/*; do + [ -f $path/mirror ] || continue echo "" - echo -e "\033[1mMirrored packages diff\033[0m" - echo "================================================================================" - cat packages.diff - if [ ! "`cat packages.diff | wc -l`" = 0 ]; then + if [ "$path" != "$LOCALSTATE" ]; then + echo "Recharge undigest $(basename $path):" + fi + cd $path + if [ -f "packages.list" ]; then + echo -n "Creating backup of the last packages list..." + mv -f packages.desc packages.desc.bak 2>/dev/null + mv -f packages.md5 packages.md5.txt 2>/dev/null + mv -f packages.txt packages.txt.bak 2>/dev/null + mv -f packages.list packages.list.bak 2>/dev/null + mv -f packages.equiv packages.equiv.bak 2>/dev/null + mv -f files.list.lzma files.list.lzma.bak 2> /dev/nul + status + fi + download_from "$(cat mirror)" packages.desc + download_from "$(cat mirror)" packages.md5 + download_from "$(cat mirror)" packages.txt + download_from "$(cat mirror)" packages.list + download_from "$(cat mirror)" packages.equiv + download_from "$(cat mirror)" files.list.lzma + if [ -f "packages.list.bak" ]; then + diff -u packages.list.bak packages.list | grep ^+[a-z] > packages.diff + sed -i s/+// packages.diff + echo "" + echo -e "\033[1mMirrored packages diff\033[0m" echo "================================================================================" - echo "`cat packages.diff | wc -l` new packages on the mirror." - echo "" + cat packages.diff + if [ ! "`cat packages.diff | wc -l`" = 0 ]; then + echo "================================================================================" + echo "`cat packages.diff | wc -l` new packages on the mirror." + echo "" + else + echo "`cat packages.diff | wc -l` new packages on the mirror." + echo "" + fi else - echo "`cat packages.diff | wc -l` new packages on the mirror." - echo "" - fi - else - echo -e " + echo -e " ================================================================================ Last packages.list is ready to use. Note that next time you recharge the list, a list of differencies will be displayed to show new and upgradeable packages.\n" - fi + fi + done ;; upgrade) # Upgrade all installed packages with the new version from the mirror. @@ -1784,31 +1854,68 @@ echo "$files file(s) removed from cache." echo "" ;; + list-undigest) + # list undigest URLs. + # + if [ "$2" = "--box" ]; then + for i in $LOCALSTATE/undigest/*/mirror; do + [ -f $i ] || continue + echo "$(basename $(dirname $i))|$(cat $i)" + done + else + echo "" + echo -e "\033[1mCurrent undigest(s)\033[0m" + echo "================================================================================" + for i in $LOCALSTATE/undigest/*/mirror; do + if [ ! -f $i ]; then + echo "No undigest mirror found." + exit 1 + fi + echo "$(basename $(dirname $i)) $(cat $i)" + done + echo "" + fi + ;; + remove-undigest) + # remove undigest URL. + # + check_root + if [ -d $LOCALSTATE/undigest/$2 ]; then + echo -n "Remove $2 undigest (y/N) ? "; read anser + if [ "$anser" = "y" ]; then + echo -n "Removing $2 undigest..." + rm -rf $LOCALSTATE/undigest/$2 + status + rmdir $LOCALSTATE/undigest 2> /dev/null + fi + else + echo "Undigest $2 not found" + fi + ;; + add-undigest|setup-undigest) + # Add undigest URL. + # + check_root + undigest=$2 + [ -d $LOCALSTATE/undigest ] || mkdir $LOCALSTATE/undigest + if [ -z "$undigest" ]; then + i=1 + while [ -d $LOCALSTATE/undigest/$i ]; do + i=$(($i+1)) + done + undigest=$i + fi + if [ ! -d $LOCALSTATE/undigest/$undigest ]; then + echo "Creating new undigest $undigest." + mkdir $LOCALSTATE/undigest/$undigest + fi + setup_mirror $LOCALSTATE/undigest/$undigest $3 + ;; setup-mirror) # Change mirror URL. # check_root - # Backup old list. - if [ -f "$LOCALSTATE/mirror" ]; then - cp -f $LOCALSTATE/mirror $LOCALSTATE/mirror.bak - fi - echo "" - echo -e "\033[1mCurrent mirror(s)\033[0m" - echo "================================================================================" - echo " `cat $MIRROR`" - echo " -Please enter URL of the new mirror (http or ftp). You must specify the complete -address to the directory of the packages and packages.list file." - echo "" - echo -n "New mirror URL : " - read NEW_MIRROR_URL - if [ "$NEW_MIRROR_URL" = "" ]; then - echo "Nothing has been changed." - else - echo "Setting mirror(s) to : $NEW_MIRROR_URL" - echo "$NEW_MIRROR_URL" > $LOCALSTATE/mirror - fi - echo "" + setup_mirror $LOCALSTATE $2 ;; reconfigure) # Replay post_install from receipt diff -r 7e9bd92fa8b5 -r 64e13d7d11db tazpkgbox --- a/tazpkgbox Sun Oct 26 20:21:13 2008 -0700 +++ b/tazpkgbox Mon Oct 27 23:12:36 2008 +0000 @@ -6,7 +6,7 @@ # # (C) GNU gpl v3 - SliTaz GNU/Linux 2008. # -VERSION=2.3 +VERSION=2.5 # Tazpkgbox is only for root. if test $(id -u) != 0 ; then @@ -25,6 +25,7 @@ echo "all" > /tmp/tazpkgbox/installed-category echo "all" > /tmp/tazpkgbox/installable-category echo "all" > /tmp/tazpkgbox/mirrored-category +echo "all" > /tmp/tazpkgbox/undigest-category echo "" > /tmp/tazpkgbox/search-installed echo "" > /tmp/tazpkgbox/search-mirrored @@ -97,6 +98,58 @@ ' +export SETUP_UNDIGEST=' + + + + 560160 + UNDIGEST_LIST + + tazpkg list-undigest --box + xterm -T "Remove undigest" -geometry 80x16+120+120 -e "tazpkg remove-undigest $UNDIGEST_LIST; sleep 2" + + + + + + + UNDIGEST_URL + + + + + + + + UNDIGEST_NAME + + + + + + + + +' + # Main dialog export TAZPKG_DIALOG=' @@ -111,7 +164,7 @@ - + @@ -122,6 +175,7 @@ echo "$PKG" > /tmp/tazpkgbox/pkg /usr/lib/slitaz/tazpkgbox/package_infos refresh:PKG + refresh:GETIT refresh:PKG_STATS refresh:CACHE_STATS @@ -209,6 +263,8 @@ xterm -T "Recharge" -geometry 80x16+120+120 -e "tazpkg recharge; sleep 2" 2>/dev/null + refresh:DEV + refresh:GET refresh:GETIT refresh:PKG_STATS @@ -224,6 +280,7 @@ echo "$GET" > /tmp/tazpkgbox/pkg /usr/lib/slitaz/tazpkgbox/package_infos refresh:PKG + refresh:GETIT refresh:PKG_STATS refresh:CACHE_STATS @@ -259,7 +316,9 @@ xterm -T "Recharge" -geometry 80x16+120+120 -e "tazpkg recharge; sleep 2" 2>/dev/null + refresh:DEV refresh:GET + refresh:GETIT refresh:PKG_STATS @@ -268,6 +327,73 @@ 620240 + DEV + + /usr/lib/slitaz/tazpkgbox/list undigest + echo "$DEV" > /tmp/tazpkgbox/pkg + /usr/lib/slitaz/tazpkgbox/package_infos + refresh:PKG + refresh:GETIT + refresh:PKG_STATS + refresh:CACHE_STATS + + + + + + + + + + + UNDIGEST_ENTRY + echo all; ls /var/lib/tazpkg/undigest 2> /dev/null + + + + + + UNDIGEST_CAT + all + base-system + x-window + utilities + network + graphics + multimedia + office + development + system-tools + security + games + misc + meta + non-free + + + + + + + + 620240 BLOCKED /usr/lib/slitaz/tazpkgbox/list blocked @@ -430,7 +556,7 @@ - installed=`ls /var/lib/tazpkg/installed | wc -l`; mirrored=`cat /var/lib/tazpkg/packages.list | wc -l`; blocked=`cat /var/lib/tazpkg/blocked-packages.list | wc -l`; installable=$(($mirrored - $installed)); [ $installable -lt 0 ] && installable=0; echo "Packages: $installed installed, $blocked blocked, $installable installable, $mirrored mirrored, `cat /var/lib/tazpkg/upgradable-packages.list 2> /dev/null | wc -l` to upgrade " + installed=`ls /var/lib/tazpkg/installed | wc -l`; mirrored=`cat /var/lib/tazpkg/packages.list | wc -l`; undigest=`cat /var/lib/tazpkg/undigest/*/packages.list 2> /dev/null | wc -l`; blocked=`cat /var/lib/tazpkg/blocked-packages.list 2> /dev/null | wc -l`; installable=$(($mirrored + $undigest - $installed)); [ $installable -lt 0 ] && installable=0; echo "Packages: $installed installed, $blocked blocked, $installable installable, $undigest undigest, $mirrored mirrored, `cat /var/lib/tazpkg/upgradable-packages.list 2> /dev/null | wc -l` to upgrade " PKG_STATS