tazpkg annotate modules/search @ rev 846
Remove "busybox" "prefixes" (thanks llev)
We used "busybox wget", etc. to be sure we called Busybox's "wget", not any other "wget". Workaround already done in "getenv" module.
We used "busybox wget", etc. to be sure we called Busybox's "wget", not any other "wget". Workaround already done in "getenv" module.
author | Aleksej Bobylev <al.bobylev@gmail.com> |
---|---|
date | Fri Oct 09 13:14:01 2015 +0300 (2015-10-09) |
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 |