tazpkg annotate modules/search @ rev 937

modules/get: make wget progress metter working again
Now, Busybox v. 1.26 make the difference whether it outputs progress meter to the file or to the tty (libbb/progress.c).
Bug report: http://forum.slitaz.org/topic/two-issues-with-tazpkg-934
author Aleksej Bobylev <al.bobylev@gmail.com>
date Fri Jan 27 12:13:57 2017 +0200 (2017-01-27)
parents a02e36d44d06
children 24c9c0777880
rev   line source
al@840 1 #!/bin/sh
al@840 2 # TazPkg - Tiny autonomous zone packages manager, hg.slitaz.org/tazpkg
al@840 3 # search - TazPkg module
al@840 4 # Search packages and files
al@840 5
al@840 6
al@840 7 # Connect function libraries
al@840 8 . /lib/libtaz.sh
al@840 9
al@840 10 # Get TazPkg working environment
al@840 11 . @@MODULES@@/getenv
al@840 12
al@840 13
al@840 14
al@840 15
al@840 16 # Search pattern in installed packages.
al@840 17
al@840 18 search_in_installed_packages() {
al@840 19 _ 'Installed packages'; separator '-'
al@840 20 num='0'
al@840 21 TMPLIST=$(mktemp)
al@840 22
al@840 23 awk -F$'\t' -vpattern="$PATTERN" -vt="$TMPLIST" '
al@840 24 BEGIN { IGNORECASE = 1 }
al@840 25 index($1 "-" $2, pattern) {
al@840 26 printf "%-24s%-18s%s\n", $1, $2, $3;
al@840 27 printf "1" >> t
al@842 28 }' "$PKGS_DB/installed.info" | tazpkg call translate_category
al@840 29 num=$(wc -m < "$TMPLIST"); rm "$TMPLIST"
al@840 30
al@840 31 footer "$(_p \
al@840 32 '%s installed package found for "%s"' \
al@840 33 '%s installed packages found for "%s"' "$num" \
al@840 34 "$num" "$PATTERN")"
al@840 35 }
al@840 36
al@840 37
al@840 38 # Search in packages.list for available pkgs.
al@840 39
al@840 40 search_in_packages_list() {
al@840 41 _ 'Available packages'; separator '-'
al@840 42 num='0'
al@840 43 TMPLIST=$(mktemp)
al@840 44
al@840 45 for i in $PKGS_DB/packages.info $PKGS_DB/undigest/*/packages.info; do
al@840 46 [ -e "$i" ] && awk -F$'\t' -vpattern="$PATTERN" -vt="$TMPLIST" '
al@840 47 BEGIN { IGNORECASE = 1 }
al@840 48 index($1 "-" $2, pattern) {
al@840 49 printf "%-24s%-18s%s\n", $1, $2, $3;
al@840 50 printf "1" >> t
al@842 51 }' "$i" | tazpkg call translate_category
al@840 52 done
al@840 53
al@840 54 for i in $PKGS_DB/extra.list $PKGS_DB/undigest/*/extra.list; do
al@840 55 [ -e "$i" ] && awk -F'|' -vpattern="$PATTERN" -vt="$TMPLIST" '
al@840 56 BEGIN { IGNORECASE = 1 }
al@840 57 index($1 "-" $5, pattern) {
al@840 58 printf "%-24s%-18s%s\n", $1 " (extra)", $5, $4;
al@840 59 printf "1" >> t
al@842 60 }' "$i" | tazpkg call translate_category
al@840 61 done
al@840 62
al@840 63 if [ ! -f "$PKGS_DB/packages.info" ]; then
al@840 64 newline
al@840 65 longline "$(_ \
al@840 66 "No \"%s\" found to check for mirrored packages. For more results, please run \
al@840 67 \"%s\" once as root before searching." 'packages.info' 'tazpkg recharge')"
al@840 68 newline
al@840 69 fi
al@840 70
al@840 71 num=$(wc -m < "$TMPLIST"); rm "$TMPLIST"
al@840 72 footer "$(_p \
al@840 73 '%s available package found for "%s"' \
al@840 74 '%s available packages found for "%s"' "$num" \
al@840 75 "$num" "$PATTERN")"
al@840 76 }
al@840 77
al@840 78
al@840 79 # search --mirror: Search in packages.txt for available pkgs and give more
al@840 80 # info than --list or default.
al@840 81
al@840 82 search_in_packages_txt() {
al@840 83 _ 'Matching packages name with version and desc'; separator '-'
al@840 84 num='0'
al@840 85 TMPLIST=$(mktemp)
al@840 86
al@840 87 for i in $PKGS_DB/packages.info $PKGS_DB/undigest/*/packages.info; do
al@840 88 [ -e "$i" ] && awk -F$'\t' -vpattern="$PATTERN" -vt="$TMPLIST" '
al@840 89 BEGIN { IGNORECASE = 1 }
al@840 90 index($1 " " $2 " " $4, pattern) {
al@840 91 split($7, s, " ");
al@840 92 printf "%s\n%s\n%s\n%s (%s installed)\n\n", $1, $2, $4, s[1], s[2];
al@840 93 printf "1" >> t;
al@840 94 }' "$i"
al@840 95 done
al@840 96
al@840 97 if [ ! -f "$PKGS_DB/packages.info" ]; then
al@840 98 newline
al@840 99 longline "$(_ \
al@840 100 "No \"%s\" found to check for mirrored packages. For more results, please run \
al@840 101 \"%s\" once as root before searching." 'packages.info' 'tazpkg recharge')"
al@840 102 newline
al@840 103 fi
al@840 104
al@840 105 num=$(wc -m < "$TMPLIST"); rm "$TMPLIST"
al@840 106 footer "$(_p \
al@840 107 '%s available package found for "%s"' \
al@840 108 '%s available packages found for "%s"' "$num" \
al@840 109 "$num" "$PATTERN")"
al@840 110 }
al@840 111
al@840 112
al@840 113
al@840 114
al@840 115 case "$1" in
al@840 116 pkg)
al@840 117 # Search for a package by pattern or name
al@840 118
al@840 119 # Input: package_name pattern (part of package name)
al@840 120 # Output:
al@840 121 # installed: list of installed packages (as info table)
al@840 122 # list: list of available packages (installed and installable) (as info table)
al@840 123 # mirror: list of available packages (installed and installable) (in special format)
al@840 124 # (matching package name, version, or short description)
al@840 125
al@840 126 PATTERN="$2"
al@840 127 title 'Search result for "%s"' "$PATTERN"
al@840 128 [ -n "$installed" ] && search_in_installed_packages
al@840 129 [ -n "$list" ] && search_in_packages_list
al@840 130 [ -n "$mirror" ] && search_in_packages_txt
al@840 131 if [ -z "$installed$list$mirror" ]; then
al@840 132 # If none of "--installed", "--list", "--mirror" given
al@840 133 search_in_installed_packages
al@840 134 search_in_packages_list
al@840 135 fi
al@840 136 ;;
al@840 137
al@840 138 file)
al@840 139 # Search for a file by pattern or name
al@840 140
al@840 141 # Input: file_name pattern (part of file name)
al@840 142 # Output: list of (installed or available) packages with matched filenames by file_name pattern
al@840 143
al@840 144 title 'Search result for file "%s"' "$2"
al@840 145 TMPLIST=$(mktemp)
al@840 146
al@840 147 if [ -n "$mirror" ]; then
al@840 148 # Option "--mirror" given: process available packages
al@840 149 TMPDIR=$(mktemp -d)
al@840 150 for i in $PKGS_DB/files.list.lzma $PKGS_DB/undigest/*/files.list.lzma; do
al@840 151 [ -f "$i" ] || continue
al@840 152 lzcat "$i" | awk -F: -vtmp="$TMPLIST" -vdir="$TMPDIR" \
al@840 153 -vfile="$2" -vcfile="$(colorize 32 "$2")" '
al@840 154 BEGIN { efile = gensub("\+", "\\\+", "g", file); }
al@840 155 index($2, file) {
al@840 156 gsub(efile, cfile, $2);
al@840 157 print $2 >> dir"/"$1;
al@840 158 printf "1" >> tmp;
al@840 159 }'
al@840 160 done
al@840 161
al@840 162 for pkg in $(cd "$TMPDIR"; ls); do
al@840 163 newline
al@840 164 emsg "<c 33>$(_ 'Package %s:' $pkg)</c>"
al@840 165 cat "$TMPDIR/$pkg"
al@840 166 done
al@840 167
al@840 168 rm -r "$TMPDIR"
al@840 169
al@840 170 else
al@840 171 # Option "--mirror" not given: process installed packages
al@840 172
al@840 173 # Check all pkg files.list in search match which specify the package
al@840 174 # name and the full path to the file(s).
al@842 175 for pkg in $(awk -F$'\t' '{print $1}' $PKGS_DB/installed.info); do
al@842 176 FL="$INSTALLED/$pkg/files.list"
al@842 177 if grep -qs "$2" "$FL"; then
al@840 178 newline
al@840 179 emsg "<c 33>$(_ 'Package %s:' "$pkg")</c>"
al@840 180 awk -vtmp="$TMPLIST" -vfile="$2" -vcfile="$(colorize 32 $2)" '
al@840 181 BEGIN { efile = gensub("\+", "\\\+", "g", file); }
al@840 182 index($0, file) {
al@840 183 gsub(efile, cfile);
al@840 184 print " "$0;
al@840 185 printf "1" >> tmp;
al@840 186 }
al@842 187 ' "$FL"
al@840 188 fi
al@840 189 done
al@840 190
al@840 191 fi
al@840 192
al@840 193 num=$(wc -m < "$TMPLIST"); rm "$TMPLIST"
al@840 194 footer "$(_p '%s file' '%s files' "$num" \
al@840 195 "$(colorize 32 "$num")")"
al@840 196 ;;
al@840 197
al@840 198 file2)
al@840 199 # Search for a package name
al@840 200
al@840 201 # Input: file_name pattern (part of file name)
al@840 202 # Output: list of available packages with matched filenames by file_name pattern
al@840 203
al@840 204 title 'Search result for package "%s"' "$2"
al@840 205
al@840 206 # Search for a file on mirror and output only the package name
al@840 207 TMPLIST=$(mktemp)
al@840 208 for i in $PKGS_DB/files.list.lzma $PKGS_DB/undigest/*/files.list.lzma; do
al@840 209 [ -f "$i" ] || continue
al@840 210 lzcat "$i" | awk -F: -vT="$TMPLIST" -vterm="$2" '
al@840 211 BEGIN { P = "" }
al@840 212 index($2, term) {
al@840 213 if ($1 != P) {
al@840 214 print $1;
al@840 215 printf "1" >> T;
al@840 216 P = $1
al@840 217 }
al@840 218 }'
al@840 219 done
al@840 220 match=$(wc -m < "$TMPLIST")
al@840 221 rm "$TMPLIST"
al@840 222
al@840 223 footer "$(emsg "$(_p '%s package' '%s packages' "$match" \
al@840 224 "<c 32>$match</c>")")"
al@840 225 ;;
al@840 226 esac