# HG changeset patch # User Aleksej Bobylev # Date 1431787047 -10800 # Node ID 918bafc87bf62147ad4c550887eaa19f79813fc6 # Parent e5c261e450c722bf6c6e1196ca1e4540f13fdee9 tazpkg: tiny improvements (-l, -lm, -lf, -a, -sf). diff -r e5c261e450c7 -r 918bafc87bf6 tazpkg --- a/tazpkg Fri May 15 04:33:46 2015 +0300 +++ b/tazpkg Sat May 16 17:37:27 2015 +0300 @@ -261,7 +261,7 @@ # If not and user is root we create them. check_base_dir() { - if [ "$(id -u)" == "0" ]; then + if [ "$(id -u)" == '0' ]; then check_dir $1$CACHE_DIR check_dir $1$INSTALLED check_dir $1$SLITAZ_LOGS @@ -394,15 +394,17 @@ check_for_installed_info() { info_path="$ROOT$PKGS_DB/installed.info" if [ ! -f "$info_path" ]; then - if [ "$(id -u)" == "0" ]; then + if [ "$(id -u)" == '0' ]; then _ 'File "%s" generated. Please wait...' installed.info for pkg in $ROOT$PKGS_DB/installed/*/receipt; do unset_receipt . $pkg SIZES=$(echo $PACKED_SIZE $UNPACKED_SIZE | sed 's|\.0||g') DEPENDS=$(echo $DEPENDS) # remove newlines from some receipts + MD5="$(fgrep " $PACKAGE-$VERSION$EXTRAVERSION.tazpkg" \ + $ROOT$PKGS_DB/installed.md5 | awk '{print $1}')" cat >> $info_path << EOT -$PACKAGE $VERSION$EXTRAVERSION $CATEGORY $SHORT_DESC $WEB_SITE $TAGS $SIZES $DEPENDS +$PACKAGE $VERSION$EXTRAVERSION $CATEGORY $SHORT_DESC $WEB_SITE $TAGS $SIZES $DEPENDS $MD5 EOT done else @@ -411,6 +413,9 @@ exit 1 fi fi + + # Check for md5 field in the installed.info + } @@ -1064,7 +1069,7 @@ for i in $pkg-*.tazpkg; do [ -f $i ] || continue { cd $TMP_DIR ; cpio --quiet -i receipt > /dev/null 2>&1; } < $i - [ "$(. $TMP_DIR/receipt; echo $PACKAGE)" = "$pkg" ] || continue + [ "$(. $TMP_DIR/receipt; echo $PACKAGE)" == "$pkg" ] || continue if grep -q ^$(package_fullname_in_dir $TMP_DIR).tazpkg$ $list then found=1 @@ -1185,9 +1190,9 @@ [ -f $pkg/receipt ] || continue EXTRAVERSION="" . $pkg/receipt - [ "$PACKAGE-$VERSION$EXTRAVERSION" = "$file" ] && break + [ "$PACKAGE-$VERSION$EXTRAVERSION" == "$file" ] && break done - [ "$PACKAGE-$VERSION$EXTRAVERSION" = "$file" ] && continue + [ "$PACKAGE-$VERSION$EXTRAVERSION" == "$file" ] && continue cd $CACHE_DIR download $file.tazpkg cd $TMP_DIR @@ -1236,7 +1241,7 @@ else read NEW_MIRROR_URL fi - if [ "$NEW_MIRROR_URL" = "" ]; then + if [ -z "$NEW_MIRROR_URL" ]; then _ 'Nothing has been changed.' else _ 'Setting mirror(s) to: "%s"' $NEW_MIRROR_URL @@ -1375,10 +1380,13 @@ title 'Blocked packages' if [ -s "$BLOCKED" ];then cat $BLOCKED + num=$(wc -l < $BLOCKED) + footer "$(_p '%s package' '%s packages' "$num" \ + "$(colorize 31 $num)")" else _ 'No blocked packages found.' fi - newline; exit 0 + newline ;; c|cat|categories) @@ -1387,28 +1395,22 @@ echo "$PKGS_CATEGORIES" | sed 's|[^a-z-]|\n|g; /^$/d' | \ sed 's|\(.*\)|\1\t\1|' | translate_category | awk -F$'\t' '{ - if ($1==$2) print $1; else print $1"\033[15G "$2}' + if ($1==$2) print $1; else printf "%-14s %s\n", $1, $2}' num=$(echo -n "$PKGS_CATEGORIES" | wc -l) - footer "$(_p \ - '%s category' \ - '%s categories' $num \ - $num)" - exit 0 + footer "$(_p '%s category' '%s categories' "$num" \ + "$(colorize 33 $num)")" ;; '') # By default list all packages and versions. title 'List of all installed packages' - TMPLIST=$(mktemp) - awk -F$'\t' '{print $1"\033[35G "$2"\033[53G "$3}' \ - $PKGS_DB/installed.info | tee $TMPLIST | translate_category - - packages=$(wc -l $TMPLIST | awk '{print $1}'); rm $TMPLIST - footer "$(emsg $(_p \ - '%s package installed.' \ - '%s packages installed.' $packages \ - "$packages"))" + awk -F$'\t' '{printf "%-34s %-17s %s\n", $1, $2, $3}' \ + $PKGS_DB/installed.info | translate_category + + num=$(wc -l < $PKGS_DB/installed.info) + footer "$(_p '%s package installed.' '%s packages installed.' "$num" \ + "$(colorize 32 $num)")" ;; *) @@ -1417,18 +1419,15 @@ ASKED_CATEGORY=$(reverse_translate_category "$ASKED_CATEGORY_I18N") title 'Installed packages of category "%s"' $ASKED_CATEGORY_I18N TMPLIST=$(mktemp) - awk -F$'\t' ' - { - if ($3 == "'$ASKED_CATEGORY'") - print $1"\033[35G "$2 - }' \ + awk -F$'\t' -vcat="$ASKED_CATEGORY" \ + '{ if ($3 == cat) printf "%-34s %s\n", $1, $2; }' \ $PKGS_DB/installed.info | tee $TMPLIST | translate_category - packages=$(wc -l $TMPLIST | awk '{print $1}'); rm $TMPLIST + num=$(wc -l < $TMPLIST); rm $TMPLIST footer "$(emsg $(_p \ '%s package installed of category "%s".' \ - '%s packages installed of category "%s".' $packages \ - "$packages" "$ASKED_CATEGORY_I18N"))" + '%s packages installed of category "%s".' $num \ + "$num" "$ASKED_CATEGORY_I18N"))" ;; esac ;; @@ -1445,36 +1444,54 @@ num=$(wc -l < $PKGS_DB/packages.diff) footer "$(_p \ '%s new package listed on the mirror.' \ - '%s new packages listed on the mirror.' $num \ - $num)" + '%s new packages listed on the mirror.' "$num" \ + "$(colorize 32 $num)")" else newline _ 'Unable to list anything, no packages.diff found.' _ 'Recharge your current list to create a first diff.' newline - fi; exit 0 ;; - --text|--txt|--raw|*) + fi + ;; + *) title 'List of available packages on the mirror' - cat $PKGS_DB/packages.txt ;; + awk -F$'\t' '{ + split($7, s, " "); + printf "%s\n%s\n%s\n%s (%s installed)\n\n", $1, $2, $4, s[1], s[2]; + }' $PKGS_DB/packages.info + num=$(wc -l < $PKGS_DB/packages.info) + footer "$(_p \ + '%s package in the last recharged list.' \ + '%s packages in the last recharged list.' "$num" \ + "$(colorize 32 $num)")" + ;; esac - pkgs=$(wc -l < $PKGS_DB/packages.list) - footer "$(emsg "$(_p \ - '%s package in the last recharged list.' \ - '%s packages in the last recharged list.' $pkgs \ - "$pkgs")")" ;; list-files|-lf) # List files installed with the package. check_for_package_on_cmdline - check_for_receipt - title 'Installed files by "%s"' $PACKAGE - sort < $INSTALLED/$PACKAGE/files.list - files=$(wc -l < $INSTALLED/$PACKAGE/files.list) - footer "$(emsg "$(_p \ - '%s file' '%s files' $files \ - "$files")")" + if [ -d "$INSTALLED/$PACKAGE" ]; then + # installed package + title 'Installed files by "%s"' $PACKAGE + sort < $INSTALLED/$PACKAGE/files.list + num=$(wc -l < $INSTALLED/$PACKAGE/files.list) + footer "$(_p '%s file' '%s files' $num \ + "$(colorize 32 $num)")" + elif [ -n "$(grep "^$PACKAGE"$'\t' $PKGS_DB/packages.info)" ]; then + # available package + title 'Installed files by "%s"' $PACKAGE + TMPLIST=$(mktemp) + lzcat $PKGS_DB/files.list.lzma | sed -n "/^$PACKAGE: / s|^[^:]*: ||p" | tee $TMPLIST + num=$(wc -l < $TMPLIST); rm $TMPLIST + footer "$(_p '%s file' '%s files' $num \ + "$(colorize 32 $num)")" + else + newline + _ 'Package "%s" not available.' "$PACKAGE" + newline + fi ;; @@ -1482,13 +1499,13 @@ # Information about package. check_for_package_on_cmdline check_for_receipt - EXTRAVERSION="" + EXTRAVERSION='' . $INSTALLED/$PACKAGE/receipt im && title 'TazPKG information' # Display localized short description for LC in $LANG ${LANG%_*}; do if [ -e "$PKGS_DB/packages-desc.$LC" ]; then - LOCDESC=$(grep -e "^$PACKAGE " $PKGS_DB/packages-desc.$LC | cut -d' ' -f2) + LOCDESC=$(grep -e "^$PACKAGE"$'\t' $PKGS_DB/packages-desc.$LC | cut -d$'\t' -f2) [ -n "$LOCDESC" ] && SHORT_DESC="$LOCDESC" fi done @@ -1516,12 +1533,13 @@ desc) # Display package description - if [ -n "$(grep -e "^$PACKAGE " $PKGS_DB/installed.info)" ]; then + if [ -n "$(grep -e "^$PACKAGE"$'\t' $PKGS_DB/installed.info)" ]; then im && title 'Description of package "%s"' $PACKAGE - if [ -f "$INSTALLED/$PACKAGE/description.txt" ]; then + if [ -s "$INSTALLED/$PACKAGE/description.txt" ]; then cat $INSTALLED/$PACKAGE/description.txt else - im && awk -F$'\t' '{if ($1 == "'$PACKAGE'") print $4}' $PKGS_DB/installed.info + im && awk -F$'\t' -vp="$PACKAGE" '{ + if ($1 == p) print $4 }' $PKGS_DB/installed.info fi im && footer else @@ -1532,10 +1550,10 @@ activity|log|-a) # Show activity log - [ "$nb" ] || nb=18 + [ -n "$nb" ] || nb='18' title 'TazPKG Activity' - IFS=" " - tail -n ${nb} ${LOG} | \ + IFS=' ' + tail -n $nb $LOG | tac | \ while read date hour none action none pkg vers none; do case $action in Installed) @@ -1545,7 +1563,8 @@ *) action=$(boldify $action) ;; esac - echo "$date $hour : $action $pkg $vers" + date_locale="$(date -d "$date $hour" '+%x %X')" + echo "$date_locale : $action $pkg $vers" done unset IFS footer ;; @@ -1583,27 +1602,30 @@ exit 0 fi title 'Search result for file "%s"' $2 - TMPLIST=$(mktemp) - if [ "$3" == "--mirror" ]; then - + + if [ -n "$mirror" ]; then + TMPDIR=$(mktemp -d) for i in $PKGS_DB/files.list.lzma $PKGS_DB/undigest/*/files.list.lzma; do [ -f $i ] || continue - lzcat $i | awk -F: -vP="$(gettext 'Package %s:')" -vT=$TMPLIST ' - BEGIN { last = "" } - $2 ~ /'$2'/ { - if (last != $1) { - last = $1; - PP = P; - sub(/%s/, $1, PP); - printf("\n\e[1;33m%s\e[0;39m\n", PP); - } - gsub(/'$2'/, "\e[0;32m'$2'\e[0;39m", $2); - print $2; - printf "%s" 1 >> T; + lzcat $i | awk -F: -vtmp="$TMPLIST" -vdir="$TMPDIR" \ + -vfile="$2" -vcfile="$(colorize 32 $2)" ' + BEGIN { efile = gensub("\+", "\\\+", "g", file); } + index($2, file) { + gsub(efile, cfile, $2); + print $2 >> dir"/"$1; + printf "1" >> tmp; }' done + for pkg in $(cd $TMPDIR; ls); do + newline + emsg "$(_ 'Package %s:' $pkg)" + cat $TMPDIR/$pkg + done + + rm -r $TMPDIR + else # Check all pkg files.list in search match which specify the package @@ -1613,11 +1635,12 @@ . $pkg/receipt newline emsg "$(_ 'Package %s:' $PACKAGE)" - awk -vT=$TMPLIST ' - /'$2'/ { - gsub(/'$2'/, "\e[0;32m'$2'\e[0;39m", $0); + awk -vtmp="$TMPLIST" -vfile="$2" -vcfile="$(colorize 32 $2)" ' + BEGIN { efile = gensub("\+", "\\\+", "g", file); } + index($0, file) { + gsub(efile, cfile); print " "$0; - printf "%s" 1 >> T; + printf "1" >> tmp; } ' $pkg/files.list fi @@ -1625,12 +1648,9 @@ fi - match=$(wc -m < $TMPLIST) - rm $TMPLIST - - footer "$(emsg "$(_p \ - '%s file' '%s files' $match \ - "$match")")" + num=$(wc -m < $TMPLIST); rm $TMPLIST + footer "$(_p '%s file' '%s files' "$num" \ + "$(colorize 32 $num)")" ;; @@ -1648,7 +1668,7 @@ # Search for a file on mirror and output only the package name TMPLIST=$(mktemp) for i in $PKGS_DB/files.list.lzma $PKGS_DB/undigest/*/files.list.lzma; do - [ -f $i ] || continue + [ -f "$i" ] || continue lzcat $i | awk -F: -vT=$TMPLIST ' BEGIN { P = "" } $2 ~ /'$2'/ { @@ -1891,7 +1911,7 @@ confirm "$(_ 'Remove packages depending on package "%s"? (y/N)' $PACKAGE)" answer=$? fi - if [ $answer = 0 ]; then + if [ "$answer" == '0' ]; then for i in $ALTERED; do if [ -d "$ROOT$INSTALLED/$i" ]; then echo "tazpkg remove $i $ROOTOPTS" @@ -1908,7 +1928,7 @@ confirm "$(_ 'Reinstall packages modified by package "%s"? (y/N)' $PACKAGE)" answer=$? fi - if [ $answer = 0 ]; then + if [ "$answer" == '0' ]; then for i in $REFRESH; do if [ $(wc -l < $ROOT$INSTALLED/$i) -gt 1 ]; then _ 'Check %s for reinstallation' "$INSTALLED/$i" @@ -2710,15 +2730,15 @@ check_for_package_on_cmdline check_for_packages_list - DO_CHECK="" - [ "$forced" ] && DO_CHECK=no - [ "$root" ] && ROOT="$root" && check_base_dir "$root" - [ "$list" ] && INSTALL_LIST="$list" - if [ "$rootconfig" ]; then - if [ "$root" ]; then - CACHE_DIR=$root/$CACHE_DIR - SAVE_CACHE_DIR=$CACHE_DIR - PKGS_DB=$root/$PKGS_DB + DO_CHECK='' + [ -n "$forced" ] && DO_CHECK=no + [ -n "$root" ] && ROOT="$root" && check_base_dir "$root" + [ -n "$list" ] && INSTALL_LIST="$list" + if [ -n "$rootconfig" ]; then + if [ -n "$root" ]; then + CACHE_DIR="$root/$CACHE_DIR" + SAVE_CACHE_DIR="$CACHE_DIR" + PKGS_DB="$root/$PKGS_DB" else _ 'rootconfig needs --root= option used.' >&2 exit 1 @@ -2728,7 +2748,7 @@ # Get repositories priority list. look_for_priority - AUTOEXEC="no" + AUTOEXEC='no' if ! check_for_package_in_list check; then CACHE_DIR="${CACHE_DIR%/*}/get" [ -d "$CACHE_DIR" ] || mkdir -p $CACHE_DIR @@ -2736,8 +2756,8 @@ install_package_from_get_script /tmp/$PACKAGE.$$ $ROOT exit 0 else - PACKAGE=get-$PACKAGE - AUTOEXEC=$PACKAGE + PACKAGE="get-$PACKAGE" + AUTOEXEC="$PACKAGE" check_for_package_in_list if [ -n "$(get_installed_package_pathname $PACKAGE $ROOT)" ]; then $AUTOEXEC $ROOT @@ -2745,8 +2765,8 @@ fi fi fi - # Check if forced install. - if ! [ "$forced" ]; then + # Check if no forced install. + if [ -z "$forced" ]; then check_for_installed_package $ROOT fi cd $CACHE_DIR @@ -2765,21 +2785,22 @@ newline download $PACKAGE.tazpkg fi - PACKAGE_FILE=$CACHE_DIR/$PACKAGE.tazpkg - [ "$rootconfig" ] && PKGS_DB=${PKGS_DB#$root} - install_package $ROOT + PACKAGE_FILE="$CACHE_DIR/$PACKAGE.tazpkg" + [ -n "$rootconfig" ] && PKGS_DB="${PKGS_DB#$root}" + install_package "$ROOT" [ "$AUTOEXEC" != "no" ] && $PACKAGE $ROOT update_desktop_database $ROOT - update_mime_database $ROOT ;; + update_mime_database $ROOT ;; clean-cache|-cc) # Remove all downloaded packages. check_root $@ files=$(find $CACHE_DIR -name *.tazpkg | wc -l) - size=$(du -hs $CACHE_DIR | cut -f1 | sed 's|\.0||'); [ $files == "0" ] && size="0K" - title 'Path: %s' $CACHE_DIR - action "Cleaning cache directory..." + size=$(du -hs $CACHE_DIR | cut -f1 | sed 's|\.0||'); [ "$files" == '0' ] && size="0K" + + title "Cleaning cache directory..." + action 'Path: %s' $CACHE_DIR rm -rf $CACHE_DIR/* status @@ -2792,15 +2813,15 @@ list-undigest) # list undigest URLs. - if [ "$2" = "--box" ]; then + if [ -n "$box" ]; then for i in $PKGS_DB/undigest/*/mirror; do - [ -f $i ] || continue + [ -f "$i" ] || continue echo "$(basename $(dirname $i))|$(cat $i)" done else title 'Current undigest(s)' for i in $PKGS_DB/undigest/*/mirror; do - if [ ! -f $i ]; then + if [ ! -f "$i" ]; then _ 'No undigest mirror found.' exit 1 fi @@ -2814,13 +2835,13 @@ # remove undigest URL. check_root $@ undigest="$2" - if [ -d $PKGS_DB/undigest/$2 ]; then + if [ -d "$PKGS_DB/undigest/$2" ]; then confirm "$(_ 'Remove "%s" undigest? (y/N)' $undigest)" - if [ $? = 0 ]; then + if [ $? == 0 ]; then action 'Removing "%s" undigest...' $undigest rm -rf $PKGS_DB/undigest/$2 status - rmdir $PKGS_DB/undigest 2> /dev/null + rmdir $PKGS_DB/undigest 2>/dev/null fi else _ 'Undigest "%s" not found' $undigest @@ -2834,12 +2855,12 @@ [ -d $PKGS_DB/undigest ] || mkdir $PKGS_DB/undigest if [ -z "$undigest" ]; then i=1 - while [ -d $PKGS_DB/undigest/$i ]; do + while [ -d "$PKGS_DB/undigest/$i" ]; do i=$(($i+1)) done undigest=$i fi - if [ ! -d $PKGS_DB/undigest/$undigest ]; then + if [ ! -d "$PKGS_DB/undigest/$undigest" ]; then _ 'Creating new undigest "%s".' $undigest mkdir $PKGS_DB/undigest/$undigest fi @@ -2856,7 +2877,7 @@ # Replay post_install from receipt check_for_package_on_cmdline check_root $@ - ROOT="" + ROOT='' while [ -n "$3" ]; do case "$3" in --root=*) @@ -2892,12 +2913,12 @@ shell) # TazPKG SHell - if test $(id -u) = 0 ; then + if [ "$(id -u)" == '0' ]; then PROMPT="\\033[1;33mtazpkg\\033[0;39m# " else PROMPT="\\033[1;33mtazpkg\\033[0;39m> " fi - if [ ! "$2" = "--noheader" ]; then + if [ "$2" != "--noheader" ]; then clear title 'TazPKG SHell.' _ "Type 'usage' to list all available commands or 'quit' or 'q' to exit." @@ -2923,17 +2944,17 @@ depends) # Display dependencies tree cd $INSTALLED - ALL_DEPS="" - if [ -f $2/receipt ]; then - dep_scan $2 "" + ALL_DEPS='' + if [ -f "$2/receipt" ]; then + dep_scan $2 '' fi ;; rdepends) # Display reverse dependencies tree cd $INSTALLED - ALL_DEPS="" - if [ -f $2/receipt ]; then + ALL_DEPS='' + if [ -f "$2/receipt" ]; then rdep_scan $2 fi ;; @@ -2941,18 +2962,18 @@ list-suggested) for i in $(ls -d $INSTALLED/*); do . $i/receipt - if [ "$SUGGESTED" ]; then + if [ -n "$SUGGESTED" ]; then if [ -z "$all" ]; then for s in $SUGGESTED; do - [ -d $INSTALLED/$s ] && \ - SUGGESTED=$(echo -n $SUGGESTED | sed "s/$s//") + [ -d "$INSTALLED/$s" ] && \ + SUGGESTED="$(echo -n $SUGGESTED | sed "s/$s//")" done fi cat <