tazpkg rev 834
Remove all --options from positional parameters; make "recharge" module; re-make "up" and "search" commands.
author | Aleksej Bobylev <al.bobylev@gmail.com> |
---|---|
date | Fri Aug 14 16:55:14 2015 +0300 (2015-08-14) |
parents | 56df537ccd1b |
children | c45468fb179e |
files | Makefile doc/tazpkg.en.html doc/tazpkg.ru.html modules/recharge tazpkg |
line diff
1.1 --- a/Makefile Fri Aug 14 09:52:08 2015 +0200 1.2 +++ b/Makefile Fri Aug 14 16:55:14 2015 +0300 1.3 @@ -31,7 +31,7 @@ 1.4 --package-version="$(VERSION)" -kaction -ktitle -kdie -k_ -k_n -k_p:1,2 \ 1.5 ./tazpkg \ 1.6 ./modules/convert ./modules/find-depends ./modules/help ./modules/info \ 1.7 - ./modules/list ./modules/mkdb \ 1.8 + ./modules/list ./modules/mkdb ./modules/recharge \ 1.9 ./tazpkg-box ./tazpkg-notify ./tazpanel/pkgs.cgi 1.10 1.11 msgmerge:
2.1 --- a/doc/tazpkg.en.html Fri Aug 14 09:52:08 2015 +0200 2.2 +++ b/doc/tazpkg.en.html Fri Aug 14 16:55:14 2015 +0300 2.3 @@ -238,15 +238,15 @@ 2.4 2.5 <p>The first <tt>tazpkg</tt> parameter is a command followed by other mandatory 2.6 and optional parameters as will be described hereinafter. Options begin with 2.7 -double dashes.<!-- , you can arrange them in any order and in any place, even before 2.8 +double dashes, you can arrange them in any order and in any place, even before 2.9 the command. Unknown and inappropriate options are ignored. The following 2.10 -commands are equivalent: --></p> 2.11 +commands are equivalent:</p> 2.12 2.13 -<!-- pre> 2.14 +<pre> 2.15 $ tazpkg info nano --root=<em>/mnt/sda6</em> 2.16 $ tazpkg --root=<em>/mnt/sda6</em> info nano 2.17 $ tazpkg info --root=<em>/mnt/sda6</em> nano <em>--color</em> 2.18 -</pre --> 2.19 +</pre> 2.20 2.21 <!-- p>You can add global option <tt>--root=…</tt> to any TazPkg command. This 2.22 option allows to work with other SliTaz installations. Option points to the root
3.1 --- a/doc/tazpkg.ru.html Fri Aug 14 09:52:08 2015 +0200 3.2 +++ b/doc/tazpkg.ru.html Fri Aug 14 16:55:14 2015 +0300 3.3 @@ -210,15 +210,15 @@ 3.4 <h2>Команды</h2> 3.5 3.6 <p>Первый параметр <tt>tazpkg</tt> — это команда, за которой следуют обязательные и необязательные 3.7 -параметры как будет описано далее. Опции начинаются с двух дефисов.<!-- , вы можете располагать в любом 3.8 +параметры как будет описано далее. Опции начинаются с двух дефисов, вы можете располагать в любом 3.9 порядке и в любом месте, даже перед командой. Неизвестные и неподходящие опции игнорируются. 3.10 -Следующие команды идентичны: --></p> 3.11 +Следующие команды идентичны:</p> 3.12 3.13 -<!-- pre> 3.14 +<pre> 3.15 $ tazpkg info nano --root=<em>/mnt/sda6</em> 3.16 $ tazpkg --root=<em>/mnt/sda6</em> info nano 3.17 $ tazpkg info --root=<em>/mnt/sda6</em> nano <em>--color</em> 3.18 -</pre --> 3.19 +</pre> 3.20 3.21 <!-- p>Вы можете добавить глобальную опцию <tt>--root=…</tt> к любой команде TazPkg. Эта опция позволяет 3.22 работать с другими установками SliTaz. Опция указывает на корень примонтированной файловой системы
4.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 4.2 +++ b/modules/recharge Fri Aug 14 16:55:14 2015 +0300 4.3 @@ -0,0 +1,192 @@ 4.4 +#!/bin/sh 4.5 +# TazPkg - Tiny autonomous zone packages manager, hg.slitaz.org/tazpkg 4.6 +# recharge - TazPkg module 4.7 +# Recharge packages databases from a mirror 4.8 + 4.9 + 4.10 +# Options: 4.11 +# [main|<repository>] Repository name to recharge (all if empty) 4.12 + 4.13 +# Environment variables: 4.14 +# root Root of the packages DB 4.15 +# UA User Agent string ("TazPkg-<version>") 4.16 + 4.17 + 4.18 +# Connect function libraries 4.19 +. /lib/libtaz.sh 4.20 +# Get TazPkg configuration variables 4.21 +. "$root/etc/slitaz/slitaz.conf" 4.22 +. "$root/etc/slitaz/tazpkg.conf" 4.23 +PKGS_DB="$root$PKGS_DB" 4.24 + 4.25 +# Fallback actions 4.26 +mkdir -p "$PKGS_DB" 4.27 +[ ! -e "$PKGS_DB/mirror" ] && echo "$ONLINE_PKGS" > "$PKGS_DB/mirror" 4.28 + 4.29 + 4.30 +# Functions 4.31 +# --------- 4.32 + 4.33 +# Download a file from specified mirror 4.34 + 4.35 +download_from() { 4.36 + # input: "<mirror_url>+" "file_name" 4.37 + local i 4.38 + for i in $1; do 4.39 + case "$i" in 4.40 + # Mirror URL can have a trailing slash or not. 4.41 + http://* | https://* | ftp://*) 4.42 + busybox wget -c -q -T 30 -U $UA ${i%/}/$2 2>/dev/null && break ;; 4.43 + *) 4.44 + ln -sf ${i%/}/$2 . && break ;; 4.45 + esac 4.46 + done 4.47 +} 4.48 + 4.49 + 4.50 +# When recharging errors occur 4.51 + 4.52 +recharging_failed() { 4.53 + # Restore database from bak files 4.54 + action 'Restoring database files...' 4.55 + [ -e 'ID' -a ! -e 'ID.bak' ] && rm ID 4.56 + [ -e 'IDs' -a ! -e 'IDs.bak' ] && rm IDs 4.57 + for file in $(ls $1/*.bak); do 4.58 + mv -f $file ${file%.bak} 4.59 + done 4.60 + status 4.61 + 4.62 + footer "$(colorize 31 "$(_ 'Recharging failed')")" 4.63 +} 4.64 + 4.65 + 4.66 + 4.67 + 4.68 +REPO="$1" 4.69 + 4.70 +# What to recharge: main, or all, or selected undigest 4.71 +case "$REPO" in 4.72 + main) repo_to_recharge="$PKGS_DB";; 4.73 + '') repo_to_recharge="$PKGS_DB $PKGS_DB/undigest/*";; 4.74 + *) repo_to_recharge="$PKGS_DB/undigest/$REPO" 4.75 + if [ ! -d "$repo_to_recharge" ]; then 4.76 + _ "Repository \"%s\" doesn't exist." "$repo_to_recharge" >&2 4.77 + exit 1 4.78 + fi 4.79 + ;; 4.80 +esac 4.81 + 4.82 +for path in $repo_to_recharge; do 4.83 + [ ! -f $path/mirror ] && continue # skip 4.84 + cd $path 4.85 + mirror="$(cat mirror)" 4.86 + 4.87 + # Repository name 4.88 + if [ "$path" == "$PKGS_DB" ]; then 4.89 + repo_name='Main' 4.90 + else 4.91 + repo_name="$(_n 'Undigest %s' "$(basename "$path")")" 4.92 + fi 4.93 + 4.94 + title 'Recharging repository "%s"' "$repo_name" 4.95 + 4.96 + # Don't let ID be a symlink when using local repository. 4.97 + if [ -h ID ]; then mv -f ID ID.lnk; cat ID.lnk > ID; rm ID.lnk; fi 4.98 + if [ -h IDs ]; then mv -f IDs IDs.lnk; cat IDs.lnk > IDs; rm IDs.lnk; fi 4.99 + 4.100 + [ -f ID ] && mv ID ID.bak # Compatibility with "old" ID 4.101 + [ -f IDs ] && mv IDs IDs.bak 4.102 + download_from "$mirror" IDs 4.103 + [ -e 'IDs' ] && awk '{print $1}' IDs > ID # Compatibility with "old" ID 4.104 + 4.105 + # Check if recharging is needed 4.106 + if [ -f 'IDs' ] && cmp -s IDs IDs.bak; then 4.107 + action 'Checking...'; status # "Fake" message 4.108 + footer "$(_ 'Repository "%s" is up to date.' "$repo_name")" 4.109 + rm IDs.bak ID.bak 4.110 + continue 4.111 + fi 4.112 + rm IDs.bak ID.bak 2>/dev/null 4.113 + 4.114 + [ -e 'IDs' ] && _ 'Database timestamp: %s' "$(date -d "@$(awk '{print $2}' IDs)" "+%x %R")" 4.115 + 4.116 + action 'Creating backup of the last packages list...' 4.117 + for i in packages.desc packages.$SUM packages.txt packages.list \ 4.118 + packages.equiv files.list.lzma extra.list mirrors packages.info; do 4.119 + [ -f "$i" ] && mv -f $i $i.bak 2>/dev/null 4.120 + done 4.121 + :; status 4.122 + 4.123 + # Download and extract bundle: extra.list, mirrors, files-list.md5, 4.124 + # packages.{info,desc,md5,txt,list,equiv} 4.125 + bundle='bundle.tar.lzma' 4.126 + action 'Getting "%s"...' $bundle 4.127 + download_from "$mirror" $bundle 4.128 + status 4.129 + if [ -f "$bundle" ]; then 4.130 + busybox tar -xaf $bundle; rm $bundle 4.131 + else 4.132 + recharging_failed $path; continue 4.133 + fi 4.134 + 4.135 + # Download files.list.lzma 4.136 + files_local='files.list.lzma'; files_remote='files-list.lzma' 4.137 + if [ -e "$files_local.bak" ]; then 4.138 + md5sum $files_local.bak | awk '{printf $1}' > files-list.md5.bak 4.139 + if cmp -s files-list.md5 files-list.md5.bak; then 4.140 + mv $files_local.bak $files_remote 4.141 + else 4.142 + action 'Getting "%s"...' $files_remote 4.143 + download_from "$mirror" $files_remote 4.144 + status 4.145 + fi 4.146 + else 4.147 + action 'Getting "%s"...' $files_remote 4.148 + download_from "$mirror" $files_remote 4.149 + status 4.150 + fi 4.151 + 4.152 + if [ ! -e "$files_remote" ]; then 4.153 + recharging_failed $path; continue 4.154 + fi 4.155 + mv -f $files_remote $files_local 4.156 + 4.157 + # Remove old database files (but packages.list.bak, extra.list.bak) 4.158 + for i in packages.desc packages.$SUM packages.txt packages.equiv \ 4.159 + files.list.lzma mirrors packages.info files-list.md5; do 4.160 + [ -f "$i.bak" ] && rm $i.bak 2>/dev/null 4.161 + done 4.162 + 4.163 + footer "$(_ 'Last database is ready to use.')" 4.164 + 4.165 + # Check diff 4.166 + if [ -f 'packages.list.bak' ]; then 4.167 + diff -u packages.list.bak packages.list | grep ^+[a-z] > packages.diff 4.168 + rm packages.list.bak 4.169 + if [ -f 'extra.list.bak' ]; then 4.170 + if [ -f 'extra.list' ]; then 4.171 + awk -F'|' '{print $1 " (extra)"}' extra.list > extra.list1 4.172 + awk -F'|' '{print $1 " (extra)"}' extra.list.bak > extra.list1.bak 4.173 + diff -u extra.list1.bak extra.list1 | grep ^+[a-z] >> packages.diff 4.174 + rm extra.list.bak extra.list1 extra.list1.bak 4.175 + else 4.176 + mv extra.list.bak extra.list 4.177 + fi 4.178 + fi 4.179 + sed -i s/+// packages.diff 4.180 + 4.181 + new_pkgs=$(wc -l < packages.diff) 4.182 + if [ "$new_pkgs" -gt 0 ]; then 4.183 + title 'Mirrored packages diff' 4.184 + cat packages.diff 4.185 + footer "$(emsg "$(_p \ 4.186 + '%s new package on the mirror.' \ 4.187 + '%s new packages on the mirror.' $new_pkgs \ 4.188 + "<c 32>$new_pkgs</c>")")" 4.189 + fi 4.190 + else 4.191 + longline "$(_ "Note that next time you recharge the list, a list of \ 4.192 +differences will be displayed to show new and upgradeable packages.")" 4.193 + fi 4.194 +done 4.195 +newline
5.1 --- a/tazpkg Fri Aug 14 09:52:08 2015 +0200 5.2 +++ b/tazpkg Fri Aug 14 16:55:14 2015 +0300 5.3 @@ -34,6 +34,28 @@ 5.4 printf "$(ngettext "$S" "$P" "$N")" "$@"; } 5.5 5.6 5.7 +# Translate category names (must be last in line) 5.8 + 5.9 +translate_category() { 5.10 + sed "s|base-system$|$(_ base-system)|; s|x-window$|$(_ x-window)|; 5.11 + s|utilities$|$(_ utilities)|; s|network$|$(_ network)|; 5.12 + s|graphics$|$(_ graphics)|; s|multimedia$|$(_ multimedia)|; 5.13 + s|office$|$(_ office)|; s|development$|$(_ development)|; 5.14 + s|system-tools$|$(_ system-tools)|; s|security$|$(_ security)|; 5.15 + s|games$|$(_ games)|; s|misc$|$(_ misc)|; s|meta$|$(_ meta)|; 5.16 + s|non-free$|$(_ non-free)|; s|all$|$(_ all)|; s|extra$|$(_ extra)|" 5.17 +} 5.18 + 5.19 + 5.20 +# Remove all --parameters from cmdline 5.21 +#------------------------------------- 5.22 +# (thanks to libtaz.sh all --parameters are already set to variables) 5.23 + 5.24 +IFS=$'\n' 5.25 +set -- $(echo "$*" | sed '/^--/d') 5.26 +unset IFS 5.27 + 5.28 + 5.29 # Initialize some variables to use words rather than numbers for functions 5.30 # and actions. 5.31 5.32 @@ -891,7 +913,7 @@ 5.33 # Clean to save RAM memory before installation 5.34 rm -rf "$PACKAGE-$VERSION" 5.35 5.36 - if [ "$3" == '--get' ]; then 5.37 + if [ -n "$get" ]; then 5.38 mv "$PACKAGE-$VERSION.tazpkg" "$TOP_DIR" 5.39 else 5.40 # Install pseudo package 5.41 @@ -1037,16 +1059,17 @@ 5.42 # Search pattern in installed packages. 5.43 5.44 search_in_installed_packages() { 5.45 - _ 'Installed packages' 5.46 - separator '-' 5.47 + _ 'Installed packages'; separator '-' 5.48 num='0' 5.49 - for pkg in $(ls -1 $INSTALLED | grep -i "$PATTERN"); do 5.50 - EXTRAVERSION='' 5.51 - [ -f $INSTALLED/$pkg/receipt ] || continue 5.52 - . $INSTALLED/$pkg/receipt 5.53 - emsg "$PACKAGE<i 24> $VERSION$EXTRAVERSION<i 42> $(_n $CATEGORY)" 5.54 - num=$(($num+1)) 5.55 - done 5.56 + TMPLIST="$(mktemp)" 5.57 + 5.58 + awk -F$'\t' -vpattern="$PATTERN" -vt="$TMPLIST" ' 5.59 + BEGIN { IGNORECASE = 1 } 5.60 + index($1 "-" $2, pattern) { 5.61 + printf "%-24s%-18s%s\n", $1, $2, $3; 5.62 + printf "1" >> t 5.63 + }' "$PKGS_DB/installed.info" | translate_category 5.64 + num="$(wc -m < $TMPLIST)"; rm $TMPLIST 5.65 5.66 footer "$(_p \ 5.67 '%s installed package found for "%s"' \ 5.68 @@ -1061,27 +1084,23 @@ 5.69 _ 'Available packages'; separator '-' 5.70 num='0' 5.71 TMPLIST="$(mktemp)" 5.72 - BPATTERN="$(emsg "<b>$PATTERN</b>")" 5.73 5.74 for i in $PKGS_DB/packages.info $PKGS_DB/undigest/*/packages.info; do 5.75 - [ -e "$i" ] && awk -F$'\t' -vpattern="$PATTERN" -vbpattern="$BPATTERN" \ 5.76 - -vt="$TMPLIST" ' 5.77 + [ -e "$i" ] && awk -F$'\t' -vpattern="$PATTERN" -vt="$TMPLIST" ' 5.78 BEGIN { IGNORECASE = 1 } 5.79 index($1 "-" $2, pattern) { 5.80 - pv = $1 "-" $2; gsub(pattern, bpattern, pv); print pv; 5.81 + printf "%-24s%-18s%s\n", $1, $2, $3; 5.82 printf "1" >> t 5.83 - }' $i 5.84 + }' "$i" | translate_category 5.85 done 5.86 5.87 for i in $PKGS_DB/extra.list $PKGS_DB/undigest/*/extra.list; do 5.88 - [ -e "$i" ] && awk -F'|' -vpattern="$PATTERN" -vbpattern="$BPATTERN" \ 5.89 - -vt="$TMPLIST" ' 5.90 + [ -e "$i" ] && awk -F'|' -vpattern="$PATTERN" -vt="$TMPLIST" ' 5.91 BEGIN { IGNORECASE = 1 } 5.92 index($1 "-" $5, pattern) { 5.93 - if ($5) pv = $1 "-" $5; else pv = $1; 5.94 - gsub(pattern, bpattern, pv); print pv " (extra)"; 5.95 + printf "%-24s%-18s%s\n", $1 " (extra)", $5, $4; 5.96 printf "1" >> t 5.97 - }' $i 5.98 + }' "$i" | translate_category 5.99 done 5.100 5.101 if [ ! -f "$PKGS_DB/packages.info" ]; then 5.102 @@ -1104,25 +1123,29 @@ 5.103 # info than --list or default. 5.104 5.105 search_in_packages_txt() { 5.106 - _ 'Matching packages name with version and desc' 5.107 - separator 5.108 + _ 'Matching packages name with version and desc'; separator '-' 5.109 num='0' 5.110 - for i in \ 5.111 - $PKGS_DB/packages.txt \ 5.112 - $PKGS_DB/undigest/*/packages.txt; do 5.113 - 5.114 - grep -is -A 2 "^$PATTERN" $i 5.115 - num=$(($num + $(grep -is "^$PATTERN" $i | wc -l))) 5.116 + TMPLIST="$(mktemp)" 5.117 + 5.118 + for i in $PKGS_DB/packages.info $PKGS_DB/undigest/*/packages.info; do 5.119 + [ -e "$i" ] && awk -F$'\t' -vpattern="$PATTERN" -vt="$TMPLIST" ' 5.120 + BEGIN { IGNORECASE = 1 } 5.121 + index($1 " " $2 " " $4, pattern) { 5.122 + split($7, s, " "); 5.123 + printf "%s\n%s\n%s\n%s (%s installed)\n\n", $1, $2, $4, s[1], s[2]; 5.124 + printf "1" >> t; 5.125 + }' "$i" 5.126 done 5.127 5.128 - if [ ! -f "$PKGS_DB/packages.txt" ]; then 5.129 + if [ ! -f "$PKGS_DB/packages.info" ]; then 5.130 newline 5.131 longline "$(_ \ 5.132 "No \"%s\" found to check for mirrored packages. For more results, please run \ 5.133 -\"%s\" once as root before searching." 'packages.txt' 'tazpkg recharge')" 5.134 +\"%s\" once as root before searching." 'packages.info' 'tazpkg recharge')" 5.135 newline 5.136 fi 5.137 5.138 + num="$(wc -m < $TMPLIST)"; rm $TMPLIST 5.139 footer "$(_p \ 5.140 '%s available package found for "%s"' \ 5.141 '%s available packages found for "%s"' $num \ 5.142 @@ -1309,22 +1332,6 @@ 5.143 } 5.144 5.145 5.146 -# When recharging errors occur 5.147 - 5.148 -recharging_failed() { 5.149 - # Restore database from bak files 5.150 - action 'Restoring database files...' 5.151 - [ -e 'ID' -a ! -e 'ID.bak' ] && rm ID 5.152 - [ -e 'IDs' -a ! -e 'IDs.bak' ] && rm IDs 5.153 - for file in $(ls $1/*.bak); do 5.154 - mv -f $file ${file%.bak} 5.155 - done 5.156 - status 5.157 - 5.158 - footer "$(colorize 31 "$(_ 'Recharging failed')")" 5.159 -} 5.160 - 5.161 - 5.162 # Print package name if not printed yet 5.163 print_pkgname() { 5.164 if [ "$PACKAGE" != "$PACKAGE_PRINTED" ]; then 5.165 @@ -1416,23 +1423,24 @@ 5.166 search|-s) 5.167 # Search for a package by pattern or name. 5.168 PATTERN="$2" 5.169 - if [ -z "$PATTERN" ]; then 5.170 - newline 5.171 - _ 'Please specify a pattern or package name to search for.' 5.172 - echo "$(_ 'Example:') 'tazpkg search paint'" 5.173 - newline 5.174 - exit 0 5.175 - fi 5.176 + if [ -z "$PATTERN" ]; then tazpkg -h search; exit 1; fi 5.177 + 5.178 title 'Search result for "%s"' "$PATTERN" 5.179 # Default is to search in installed pkgs and the raw list. 5.180 case "$3" in 5.181 - -i|--installed) search_in_installed_packages ;; 5.182 - -l|--list) search_in_packages_list ;; 5.183 -#buggy -m|--mirror) search_in_packages_txt ;; 5.184 - *) 5.185 - search_in_installed_packages 5.186 - search_in_packages_list ;; 5.187 - esac ;; 5.188 + -i) installed='yes';; 5.189 + -l) list='yes';; 5.190 + -m) mirror='yes';; 5.191 + esac 5.192 + 5.193 + [ -n "$installed" ] && search_in_installed_packages 5.194 + [ -n "$list" ] && search_in_packages_list 5.195 + [ -n "$mirror" ] && search_in_packages_txt 5.196 + if [ -z "$installed$list$mirror" ]; then 5.197 + search_in_installed_packages 5.198 + search_in_packages_list 5.199 + fi 5.200 + ;; 5.201 5.202 5.203 search-file|-sf) 5.204 @@ -2035,141 +2043,9 @@ 5.205 # must have only the chosen main mirror. 5.206 # 5.207 check_root $@ 5.208 - 5.209 - # usage: tazpkg recharge [--root=path] [main|<repository>] 5.210 - 5.211 - ARG="$2" 5.212 - if [ -n "$root" ]; then 5.213 - PKGS_DB="$root$PKGS_DB" 5.214 - [ "${2#--}" != "$2" ] && ARG="$3" 5.215 - fi 5.216 - 5.217 - case "$ARG" in 5.218 - main) repo_to_recharge="$PKGS_DB";; 5.219 - '') repo_to_recharge="$PKGS_DB $PKGS_DB/undigest/*";; 5.220 - *) repo_to_recharge="$PKGS_DB/undigest/$ARG" 5.221 - if [ ! -d "$repo_to_recharge" ]; then 5.222 - _ "Repository \"%s\" doesn't exist." "$repo_to_recharge" >&2 5.223 - exit 1 5.224 - fi 5.225 - ;; 5.226 - esac 5.227 - 5.228 - for path in $repo_to_recharge; do 5.229 - [ ! -f $path/mirror ] && continue # skip 5.230 - cd $path 5.231 - mirror="$(cat mirror)" 5.232 - 5.233 - # Repository name 5.234 - if [ "$path" == "$PKGS_DB" ]; then 5.235 - repo_name='Main' 5.236 - else 5.237 - repo_name="$(_n 'Undigest %s' "$(basename "$path")")" 5.238 - fi 5.239 - 5.240 - title 'Recharging repository "%s"' "$repo_name" 5.241 - 5.242 - # Don't let ID be a symlink when using local repository. 5.243 - if [ -h ID ]; then mv -f ID ID.lnk; cat ID.lnk > ID; rm ID.lnk; fi 5.244 - if [ -h IDs ]; then mv -f IDs IDs.lnk; cat IDs.lnk > IDs; rm IDs.lnk; fi 5.245 - 5.246 - [ -f ID ] && mv ID ID.bak # Compatibility with "old" ID 5.247 - [ -f IDs ] && mv IDs IDs.bak 5.248 - download_from "$mirror" IDs 5.249 - [ -e 'IDs' ] && awk '{print $1}' IDs > ID # Compatibility with "old" ID 5.250 - 5.251 - # Check if recharging is needed 5.252 - if [ -f 'IDs' ] && cmp -s IDs IDs.bak; then 5.253 - action 'Checking...'; status # "Fake" message 5.254 - footer "$(_ 'Repository "%s" is up to date.' "$repo_name")" 5.255 - rm IDs.bak ID.bak 5.256 - continue 5.257 - fi 5.258 - rm IDs.bak ID.bak 2>/dev/null 5.259 - 5.260 - [ -e 'IDs' ] && _ 'Database timestamp: %s' "$(date -d "@$(awk '{print $2}' IDs)" "+%x %R")" 5.261 - 5.262 - action 'Creating backup of the last packages list...' 5.263 - for i in packages.desc packages.$SUM packages.txt packages.list \ 5.264 - packages.equiv files.list.lzma extra.list mirrors packages.info; do 5.265 - [ -f "$i" ] && mv -f $i $i.bak 2>/dev/null 5.266 - done 5.267 - status 5.268 - 5.269 - # Download and extract bundle: extra.list, mirrors, files-list.md5, 5.270 - # packages.{info,desc,md5,txt,list,equiv} 5.271 - bundle='bundle.tar.lzma' 5.272 - action 'Getting "%s"...' $bundle 5.273 - download_from "$mirror" $bundle 5.274 - status 5.275 - if [ -f "$bundle" ]; then 5.276 - busybox tar -xaf $bundle; rm $bundle 5.277 - else 5.278 - recharging_failed $path; continue 5.279 - fi 5.280 - 5.281 - # Download files.list.lzma 5.282 - files_local='files.list.lzma'; files_remote='files-list.lzma' 5.283 - if [ -e "$files_local.bak" ]; then 5.284 - md5sum $files_local.bak | awk '{printf $1}' > files-list.md5.bak 5.285 - if cmp -s files-list.md5 files-list.md5.bak; then 5.286 - mv $files_local.bak $files_remote 5.287 - else 5.288 - action 'Getting "%s"...' $files_remote 5.289 - download_from "$mirror" $files_remote 5.290 - status 5.291 - fi 5.292 - else 5.293 - action 'Getting "%s"...' $files_remote 5.294 - download_from "$mirror" $files_remote 5.295 - status 5.296 - fi 5.297 - 5.298 - if [ ! -e "$files_remote" ]; then 5.299 - recharging_failed $path; continue 5.300 - fi 5.301 - mv -f $files_remote $files_local 5.302 - 5.303 - # Remove old database files (but packages.list.bak, extra.list.bak) 5.304 - for i in packages.desc packages.$SUM packages.txt packages.equiv \ 5.305 - files.list.lzma mirrors packages.info files-list.md5; do 5.306 - [ -f "$i.bak" ] && rm $i.bak 2>/dev/null 5.307 - done 5.308 - 5.309 - footer "$(_ 'Last database is ready to use.')" 5.310 - 5.311 - # Check diff 5.312 - if [ -f 'packages.list.bak' ]; then 5.313 - diff -u packages.list.bak packages.list | grep ^+[a-z] > packages.diff 5.314 - rm packages.list.bak 5.315 - if [ -f 'extra.list.bak' ]; then 5.316 - if [ -f 'extra.list' ]; then 5.317 - awk -F'|' '{print $1 " (extra)"}' extra.list > extra.list1 5.318 - awk -F'|' '{print $1 " (extra)"}' extra.list.bak > extra.list1.bak 5.319 - diff -u extra.list1.bak extra.list1 | grep ^+[a-z] >> packages.diff 5.320 - rm extra.list.bak extra.list1 extra.list1.bak 5.321 - else 5.322 - mv extra.list.bak extra.list 5.323 - fi 5.324 - fi 5.325 - sed -i s/+// packages.diff 5.326 - 5.327 - new_pkgs=$(wc -l < packages.diff) 5.328 - if [ "$new_pkgs" -gt 0 ]; then 5.329 - title 'Mirrored packages diff' 5.330 - cat packages.diff 5.331 - footer "$(emsg "$(_p \ 5.332 - '%s new package on the mirror.' \ 5.333 - '%s new packages on the mirror.' $new_pkgs \ 5.334 - "<c 32>$new_pkgs</c>")")" 5.335 - fi 5.336 - else 5.337 - longline "$(_ "Note that next time you recharge the \ 5.338 -list, a list of differences will be displayed to show new and upgradeable \ 5.339 -packages.")" 5.340 - fi 5.341 - done 5.342 - newline ;; 5.343 + export UA 5.344 + @@MODULES@@/recharge $2 5.345 + ;; 5.346 5.347 5.348 help-up) 5.349 @@ -2188,103 +2064,131 @@ 5.350 # 5.351 for opt in $@; do 5.352 case "$opt" in 5.353 - --recharge|-r) tazpkg recharge ;; 5.354 - --install|-i) install="y" ;; 5.355 - --check|-c) install="n" ;; 5.356 + -i) install='yes';; 5.357 + -c) check='yes';; 5.358 esac 5.359 done 5.360 + 5.361 time="$(date +%s)" 5.362 5.363 - look_for_priority 5.364 - for repo in $priority; do 5.365 - pkg_list="$repo/packages.list" 5.366 - mtime=$(find $pkg_list -mtime +7) 5.367 - if [ -n "$mtime" ]; then 5.368 - if [ "$repo" == "$PKGS_DB" ]; then 5.369 - repo_name='main' 5.370 - else 5.371 - repo_name="${repo##*/}" 5.372 - fi 5.373 - _ 'List "%s" is older than one week... Recharging.' $pkg_list 5.374 - tazpkg recharge $repo_name 5.375 - fi 5.376 - done 5.377 - 5.378 - emsg "<n>$(_ 'Package')<i 28> $(_ 'Version')<i 48> $(_ 'Status')<->" 5.379 + # Recharge packages databases (if necessary) 5.380 + tazpkg recharge >/dev/null 5.381 5.382 cd $INSTALLED 5.383 echo -n > $UP_LIST 5.384 - blocked_count=0 5.385 - installed_sum="$PKGS_DB/installed.$SUM" 5.386 - 5.387 - for pkg in *; do 5.388 - [ ! -d $pkg ] && continue 5.389 - unset VERSION EXTRAVERSION 5.390 - . $pkg/receipt 5.391 - md5=$(fgrep " $PACKAGE-$VERSION$EXTRAVERSION.tazpkg" \ 5.392 - $installed_sum | awk '{print $1}') 5.393 - for repo in $priority; do 5.394 - pkg_desc="$repo/packages.desc" 5.395 - pkg_list="$repo/packages.list" 5.396 - pkg_sum="$repo/packages.$SUM" 5.397 - 5.398 - if ! fgrep -q "$md5 $PACKAGE-" $pkg_sum; then 5.399 - # Jump to next repository in priority if pkg doesn't exist 5.400 - # in this one. 5.401 - grep -q "^$PACKAGE-" $pkg_list || continue 5.402 - 5.403 - emsg -n "$PACKAGE<i 28> $VERSION" 5.404 - 5.405 - # Skip pkgs listed in $PKGS_DB/blocked-packages.list 5.406 - if $(grep -qs "^$PACKAGE" $BLOCKED); then 5.407 - blocked_count=$(($blocked_count + 1)) 5.408 - emsg "<i 48><c 31> $(_ 'Blocked')</c>" 5.409 - break 5.410 - fi 5.411 - 5.412 - new=$(grep "^$PACKAGE |" $pkg_desc | awk '{print $3}') 5.413 - 5.414 - if [ "$VERSION" == "$new" ]; then 5.415 - emsg "<i 48><c 34> $(_ 'New build')</c>" 5.416 - else 5.417 - emsg "<i 48><c 32> $(_ 'New version %s' "$new")</c>" 5.418 - fi 5.419 - echo "$PACKAGE" >> $UP_LIST 5.420 - break 5.421 - fi 5.422 - done 5.423 + blocked_counter=$(mktemp) 5.424 + tmp_up_list=$(mktemp) 5.425 + 5.426 + look_for_priority 5.427 + repo_number=1 5.428 + for repo in $priority; do 5.429 + if [ "$repo" == "$PKGS_DB" ]; then 5.430 + repo_name='Main' 5.431 + else 5.432 + repo_name="$(basename "$repo")" 5.433 + fi 5.434 + 5.435 + [ ! -f "$repo/packages.info" ] && continue 5.436 + { 5.437 + cat $PKGS_DB/blocked-packages.list | awk '{printf "%s\t%s\n", $1, "b"}'; 5.438 + cat $PKGS_DB/installed.info | awk -F$'\t' '{printf "%s\t%s\t%s\t%s\n", $1, "i", $2, $9}'; 5.439 + cat $repo/packages.info | awk -F$'\t' '{printf "%s\t%s\t%s\t%s\n", $1, "p", $2, $9}' 5.440 + } | sort -t$'\t' -k1,1 | awk -F$'\t' \ 5.441 + -vnewbuild="$(_ 'New build')" -vcolornewbuild="$(emsg '<c 34>')" \ 5.442 + -vnewver='→ ' -vcolornewver="$(emsg '<c 32>')" \ 5.443 + -vblocked=" ($(_ 'Blocked'))" -vcolorblocked="$(emsg '<c 31>')" \ 5.444 + -vcolor0="$(emsg '</c>')" \ 5.445 + -vreponum=$repo_number -vreponame=$repo_name \ 5.446 + -vuplist="$UP_LIST" -vblocked_counter="$blocked_counter" \ 5.447 +'{ 5.448 + 5.449 + if ($1 != p) { 5.450 + if (vi && vp) { 5.451 + bb = (b=="") ? "i" : "b" 5.452 + if ("" vi != vp) { # important: compare as strings 5.453 + startc = (b=="") ? colornewver : colorblocked; 5.454 + printf "%s\t%s\t%s\t%s\t%s%s%s%s%s\t%s\n", p, vi, reponum, reponame, startc, newver, vp, b, color0, bb; 5.455 + print p >> uplist; 5.456 + if (b!="") printf 1 >> blocked_counter; 5.457 + } else if (mi != mp) { 5.458 + startc = (b=="") ? colornewbuild : colorblocked; 5.459 + printf "%s\t%s\t%s\t%s\t%s%s%s%s\t%s\n", p, vi, reponum, reponame, startc, newbuild, b, color0, bb; 5.460 + print p >> uplist; 5.461 + if (b!="") printf 1 >> blocked_counter; 5.462 + } 5.463 + } 5.464 + p = $1; b = b1 = b2 = vi = mi = vp = mp = ""; 5.465 + } 5.466 + if ($2 == "b") { b = blocked; b1 = bl1; b2 = bl2; } 5.467 + if ($2 == "i") { vi = $3; mi = $4; } 5.468 + if ($2 == "p") { vp = $3; mp = $4; } 5.469 +}' >> $tmp_up_list 5.470 + 5.471 + repo_number=$((repo_number + 1)) 5.472 + 5.473 done 5.474 + 5.475 + case "$output" in 5.476 + html) 5.477 + cat <<EOT 5.478 +<table class="wide zebra"> 5.479 + <thead> 5.480 + <tr><td>$(_ 'Package')</td><td>$(_ 'Repository')</td><td>$(_ 'Version')</td><td>$(_ 'Status')</td></tr> 5.481 + </thead> 5.482 + <tbody> 5.483 +EOT 5.484 + sort -t$'\t' -k1,3 $tmp_up_list | awk -F$'\t' '{ 5.485 + if($4=="Main"){repoicon="slitaz"}else{repoicon="web"} 5.486 + if($6=="b"){pkgicon="pkgib"}else{pkgicon="pkgi"} 5.487 + 5.488 + printf "<tr><td><input type=\"checkbox\" name=\"pkg\" value=\"%s\"/>", $1; 5.489 + printf "<a data-icon=\"%s\" href=\"?info=%s\">%s</a></td>", pkgicon, $1, $1; 5.490 + printf "<td><span data-icon=\"%s\">%s</span></td>", repoicon, $4; 5.491 + printf "<td>%s</td>", $2; 5.492 + printf "<td>%s</td></tr>\n", $5; 5.493 + }' 5.494 + echo '</tbody></table>' ;; 5.495 + *) 5.496 + emsg "<n>$(_ 'Package')<i 26>$(_ 'Repository')<i 38>$(_ 'Version')<i 49>$(_ 'Status')<->" 5.497 + sort -t$'\t' -k1,3 $tmp_up_list | awk -F$'\t' \ 5.498 + '{printf "%-24s %-11s %-10s %s\n", $1, $4, $2, $5}';; 5.499 + esac 5.500 + 5.501 sed -i /^$/d $UP_LIST 5.502 upnb=$(wc -l < $UP_LIST) 5.503 pkgs=$(ls | wc -l) 5.504 time=$(($(date +%s) - $time)) 5.505 - if [ "$upnb" == 0 ]; then 5.506 + if [ "$upnb" -eq 0 ]; then 5.507 install="n" 5.508 _ 'System is up-to-date...' 5.509 fi 5.510 5.511 - footer "$(emsg "$(_p \ 5.512 - '%s installed package scanned in %ds' \ 5.513 - '%s installed packages scanned in %ds' $pkgs \ 5.514 - "<c 32>$pkgs</c>" $time)")" 5.515 - 5.516 - if [ "$upnb" != 0 ]; then 5.517 + if [ "$upnb" -ne 0 ]; then 5.518 + blocked_count="$(wc -m < $blocked_counter)" 5.519 + 5.520 blocked="$(_p \ 5.521 '%s blocked' \ 5.522 '%s blocked' $blocked_count \ 5.523 $blocked_count)" 5.524 5.525 - boldify "$(_p \ 5.526 + footer "$(_p \ 5.527 'You have %s available upgrade (%s)' \ 5.528 'You have %s available upgrades (%s)' $upnb \ 5.529 $upnb "$blocked")" 5.530 - newline 5.531 fi 5.532 + emsg "$(_p \ 5.533 + '%s installed package scanned in %ds' \ 5.534 + '%s installed packages scanned in %ds' $pkgs \ 5.535 + "<c 32>$pkgs</c>" $time)" 5.536 + 5.537 + 5.538 + # Clean 5.539 + rm $blocked_counter $tmp_up_list 5.540 5.541 # Pkgs to upgrade ? Skip, let install them all or ask user 5.542 - [ "$install" == 'n' ] && exit 0 5.543 + [ -n "$check" ] && exit 0 5.544 if [ "$upnb" -gt 0 ]; then 5.545 - if [ "$install" == 'y' ]; then 5.546 + if [ -n "$install" ]; then 5.547 answer=0 5.548 else 5.549 confirm "$(_ 'Do you wish to install them now? (y/N)')" 5.550 @@ -2293,7 +2197,7 @@ 5.551 case "$answer" in 5.552 0) 5.553 for pkg in $(cat $UP_LIST); do 5.554 - echo 'y' | tazpkg get-install $pkg --forced 5.555 + echo 'y' | tazpkg -gi "$pkg" --forced #--reason="upgrade" 5.556 done 5.557 # List is generated each time and must be cleaned so 5.558 # tazpkg-notify doesn't find upgrades anymore. 5.559 @@ -2304,7 +2208,8 @@ 5.560 exit 0 ;; 5.561 esac 5.562 fi 5.563 - newline ;; 5.564 + newline 5.565 + ;; 5.566 5.567 5.568 bugs) 5.569 @@ -2340,7 +2245,7 @@ 5.570 look_for_priority 5.571 5.572 cd $INSTALLED 5.573 - if [ -z "$2" -o "$2" == '--full' ]; then PACKAGES="$(ls)"; else PACKAGES="$2"; fi 5.574 + if [ -z "$2" -o -n "$full" ]; then PACKAGES="$(ls)"; else PACKAGES="$2"; fi 5.575 PACKAGE_PRINTED='' 5.576 5.577 for PACKAGE in $PACKAGES; do 5.578 @@ -2387,7 +2292,7 @@ 5.579 [ -n "$PACKAGE_PRINTED" ] && footer 5.580 5.581 _ 'Looking for known bugs...' 5.582 - if [ -z "$2" -o "$2" == '--full' ]; then tazpkg bugs; else tazpkg bugs "$2"; fi 5.583 + if [ -z "$2" -o -n "$full" ]; then tazpkg bugs; else tazpkg bugs "$2"; fi 5.584 5.585 5.586 if [ -n "$full" ]; then 5.587 @@ -2441,7 +2346,7 @@ 5.588 done 5.589 footer 5.590 5.591 - if [ "$2" == '--full' ]; then 5.592 + if [ -n "$full" ]; then 5.593 title 'Alien files:' 5.594 MSG="$(_n 'No package has installed the following files:')\n" 5.595 find /etc /bin /sbin /lib /usr /var/www -not -type d 2>/dev/null | \ 5.596 @@ -2764,7 +2669,7 @@ 5.597 else 5.598 PROMPT="\\033[1;33mtazpkg\\033[0;39m> " 5.599 fi 5.600 - if [ "$2" != "--noheader" ]; then 5.601 + if [ -z "$noheader" ]; then 5.602 clear 5.603 title 'TazPkg SHell.' 5.604 _ "Type 'usage' to list all available commands or 'quit' or 'q' to exit."