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
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 |