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