tazpkg annotate modules/search @ rev 840

Add a bunch of modules with new-style support of 'root' (not all commands are modules yet); strip and compress resources.
author Aleksej Bobylev <al.bobylev@gmail.com>
date Fri Aug 28 16:10:34 2015 +0300 (2015-08-28)
parents
children 0560ba4306a1
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 # Translate category names (must be last in line)
al@840 17
al@840 18 translate_category() {
al@840 19 sed "s|base-system$|$(_ base-system)|; s|x-window$|$(_ x-window)|;
al@840 20 s|utilities$|$(_ utilities)|; s|network$|$(_ network)|;
al@840 21 s|graphics$|$(_ graphics)|; s|multimedia$|$(_ multimedia)|;
al@840 22 s|office$|$(_ office)|; s|development$|$(_ development)|;
al@840 23 s|system-tools$|$(_ system-tools)|; s|security$|$(_ security)|;
al@840 24 s|games$|$(_ games)|; s|misc$|$(_ misc)|; s|meta$|$(_ meta)|;
al@840 25 s|non-free$|$(_ non-free)|; s|all$|$(_ all)|; s|extra$|$(_ extra)|"
al@840 26 }
al@840 27
al@840 28
al@840 29 # Search pattern in installed packages.
al@840 30
al@840 31 search_in_installed_packages() {
al@840 32 _ 'Installed packages'; separator '-'
al@840 33 num='0'
al@840 34 TMPLIST=$(mktemp)
al@840 35
al@840 36 awk -F$'\t' -vpattern="$PATTERN" -vt="$TMPLIST" '
al@840 37 BEGIN { IGNORECASE = 1 }
al@840 38 index($1 "-" $2, pattern) {
al@840 39 printf "%-24s%-18s%s\n", $1, $2, $3;
al@840 40 printf "1" >> t
al@840 41 }' "$PKGS_DB/installed.info" | translate_category
al@840 42 num=$(wc -m < "$TMPLIST"); rm "$TMPLIST"
al@840 43
al@840 44 footer "$(_p \
al@840 45 '%s installed package found for "%s"' \
al@840 46 '%s installed packages found for "%s"' "$num" \
al@840 47 "$num" "$PATTERN")"
al@840 48 }
al@840 49
al@840 50
al@840 51 # Search in packages.list for available pkgs.
al@840 52
al@840 53 search_in_packages_list() {
al@840 54 _ 'Available packages'; separator '-'
al@840 55 num='0'
al@840 56 TMPLIST=$(mktemp)
al@840 57
al@840 58 for i in $PKGS_DB/packages.info $PKGS_DB/undigest/*/packages.info; do
al@840 59 [ -e "$i" ] && awk -F$'\t' -vpattern="$PATTERN" -vt="$TMPLIST" '
al@840 60 BEGIN { IGNORECASE = 1 }
al@840 61 index($1 "-" $2, pattern) {
al@840 62 printf "%-24s%-18s%s\n", $1, $2, $3;
al@840 63 printf "1" >> t
al@840 64 }' "$i" | translate_category
al@840 65 done
al@840 66
al@840 67 for i in $PKGS_DB/extra.list $PKGS_DB/undigest/*/extra.list; do
al@840 68 [ -e "$i" ] && awk -F'|' -vpattern="$PATTERN" -vt="$TMPLIST" '
al@840 69 BEGIN { IGNORECASE = 1 }
al@840 70 index($1 "-" $5, pattern) {
al@840 71 printf "%-24s%-18s%s\n", $1 " (extra)", $5, $4;
al@840 72 printf "1" >> t
al@840 73 }' "$i" | translate_category
al@840 74 done
al@840 75
al@840 76 if [ ! -f "$PKGS_DB/packages.info" ]; then
al@840 77 newline
al@840 78 longline "$(_ \
al@840 79 "No \"%s\" found to check for mirrored packages. For more results, please run \
al@840 80 \"%s\" once as root before searching." 'packages.info' 'tazpkg recharge')"
al@840 81 newline
al@840 82 fi
al@840 83
al@840 84 num=$(wc -m < "$TMPLIST"); rm "$TMPLIST"
al@840 85 footer "$(_p \
al@840 86 '%s available package found for "%s"' \
al@840 87 '%s available packages found for "%s"' "$num" \
al@840 88 "$num" "$PATTERN")"
al@840 89 }
al@840 90
al@840 91
al@840 92 # search --mirror: Search in packages.txt for available pkgs and give more
al@840 93 # info than --list or default.
al@840 94
al@840 95 search_in_packages_txt() {
al@840 96 _ 'Matching packages name with version and desc'; separator '-'
al@840 97 num='0'
al@840 98 TMPLIST=$(mktemp)
al@840 99
al@840 100 for i in $PKGS_DB/packages.info $PKGS_DB/undigest/*/packages.info; do
al@840 101 [ -e "$i" ] && awk -F$'\t' -vpattern="$PATTERN" -vt="$TMPLIST" '
al@840 102 BEGIN { IGNORECASE = 1 }
al@840 103 index($1 " " $2 " " $4, pattern) {
al@840 104 split($7, s, " ");
al@840 105 printf "%s\n%s\n%s\n%s (%s installed)\n\n", $1, $2, $4, s[1], s[2];
al@840 106 printf "1" >> t;
al@840 107 }' "$i"
al@840 108 done
al@840 109
al@840 110 if [ ! -f "$PKGS_DB/packages.info" ]; then
al@840 111 newline
al@840 112 longline "$(_ \
al@840 113 "No \"%s\" found to check for mirrored packages. For more results, please run \
al@840 114 \"%s\" once as root before searching." 'packages.info' 'tazpkg recharge')"
al@840 115 newline
al@840 116 fi
al@840 117
al@840 118 num=$(wc -m < "$TMPLIST"); rm "$TMPLIST"
al@840 119 footer "$(_p \
al@840 120 '%s available package found for "%s"' \
al@840 121 '%s available packages found for "%s"' "$num" \
al@840 122 "$num" "$PATTERN")"
al@840 123 }
al@840 124
al@840 125
al@840 126
al@840 127
al@840 128 case "$1" in
al@840 129 pkg)
al@840 130 # Search for a package by pattern or name
al@840 131
al@840 132 # Input: package_name pattern (part of package name)
al@840 133 # Output:
al@840 134 # installed: list of installed packages (as info table)
al@840 135 # list: list of available packages (installed and installable) (as info table)
al@840 136 # mirror: list of available packages (installed and installable) (in special format)
al@840 137 # (matching package name, version, or short description)
al@840 138
al@840 139 PATTERN="$2"
al@840 140 title 'Search result for "%s"' "$PATTERN"
al@840 141 [ -n "$installed" ] && search_in_installed_packages
al@840 142 [ -n "$list" ] && search_in_packages_list
al@840 143 [ -n "$mirror" ] && search_in_packages_txt
al@840 144 if [ -z "$installed$list$mirror" ]; then
al@840 145 # If none of "--installed", "--list", "--mirror" given
al@840 146 search_in_installed_packages
al@840 147 search_in_packages_list
al@840 148 fi
al@840 149 ;;
al@840 150
al@840 151 file)
al@840 152 # Search for a file by pattern or name
al@840 153
al@840 154 # Input: file_name pattern (part of file name)
al@840 155 # Output: list of (installed or available) packages with matched filenames by file_name pattern
al@840 156
al@840 157 title 'Search result for file "%s"' "$2"
al@840 158 TMPLIST=$(mktemp)
al@840 159
al@840 160 if [ -n "$mirror" ]; then
al@840 161 # Option "--mirror" given: process available packages
al@840 162 TMPDIR=$(mktemp -d)
al@840 163 for i in $PKGS_DB/files.list.lzma $PKGS_DB/undigest/*/files.list.lzma; do
al@840 164 [ -f "$i" ] || continue
al@840 165 lzcat "$i" | awk -F: -vtmp="$TMPLIST" -vdir="$TMPDIR" \
al@840 166 -vfile="$2" -vcfile="$(colorize 32 "$2")" '
al@840 167 BEGIN { efile = gensub("\+", "\\\+", "g", file); }
al@840 168 index($2, file) {
al@840 169 gsub(efile, cfile, $2);
al@840 170 print $2 >> dir"/"$1;
al@840 171 printf "1" >> tmp;
al@840 172 }'
al@840 173 done
al@840 174
al@840 175 for pkg in $(cd "$TMPDIR"; ls); do
al@840 176 newline
al@840 177 emsg "<c 33>$(_ 'Package %s:' $pkg)</c>"
al@840 178 cat "$TMPDIR/$pkg"
al@840 179 done
al@840 180
al@840 181 rm -r "$TMPDIR"
al@840 182
al@840 183 else
al@840 184 # Option "--mirror" not given: process installed packages
al@840 185
al@840 186 # Check all pkg files.list in search match which specify the package
al@840 187 # name and the full path to the file(s).
al@840 188 for pkg in $INSTALLED/*; do
al@840 189 if grep -qs "$2" "$pkg/files.list"; then
al@840 190 newline
al@840 191 emsg "<c 33>$(_ 'Package %s:' "$pkg")</c>"
al@840 192 awk -vtmp="$TMPLIST" -vfile="$2" -vcfile="$(colorize 32 $2)" '
al@840 193 BEGIN { efile = gensub("\+", "\\\+", "g", file); }
al@840 194 index($0, file) {
al@840 195 gsub(efile, cfile);
al@840 196 print " "$0;
al@840 197 printf "1" >> tmp;
al@840 198 }
al@840 199 ' "$pkg/files.list"
al@840 200 fi
al@840 201 done
al@840 202
al@840 203 fi
al@840 204
al@840 205 num=$(wc -m < "$TMPLIST"); rm "$TMPLIST"
al@840 206 footer "$(_p '%s file' '%s files' "$num" \
al@840 207 "$(colorize 32 "$num")")"
al@840 208 ;;
al@840 209
al@840 210 file2)
al@840 211 # Search for a package name
al@840 212
al@840 213 # Input: file_name pattern (part of file name)
al@840 214 # Output: list of available packages with matched filenames by file_name pattern
al@840 215
al@840 216 title 'Search result for package "%s"' "$2"
al@840 217
al@840 218 # Search for a file on mirror and output only the package name
al@840 219 TMPLIST=$(mktemp)
al@840 220 for i in $PKGS_DB/files.list.lzma $PKGS_DB/undigest/*/files.list.lzma; do
al@840 221 [ -f "$i" ] || continue
al@840 222 lzcat "$i" | awk -F: -vT="$TMPLIST" -vterm="$2" '
al@840 223 BEGIN { P = "" }
al@840 224 index($2, term) {
al@840 225 if ($1 != P) {
al@840 226 print $1;
al@840 227 printf "1" >> T;
al@840 228 P = $1
al@840 229 }
al@840 230 }'
al@840 231 done
al@840 232 match=$(wc -m < "$TMPLIST")
al@840 233 rm "$TMPLIST"
al@840 234
al@840 235 footer "$(emsg "$(_p '%s package' '%s packages' "$match" \
al@840 236 "<c 32>$match</c>")")"
al@840 237 ;;
al@840 238 esac