tazpkg rev 836
Add module "upgrade"; make bullet-proof code to work with "root" ("recharge" and "upgrade" modules); re-make depends/rdepends commands.
author | Aleksej Bobylev <al.bobylev@gmail.com> |
---|---|
date | Sat Aug 15 17:41:08 2015 +0300 (2015-08-15) |
parents | c45468fb179e |
children | 358a978f45a9 |
files | Makefile modules/recharge modules/upgrade po/fr.po po/ru.po tazpkg |
line diff
1.1 --- a/Makefile Sat Aug 15 12:23:33 2015 +0100 1.2 +++ b/Makefile Sat Aug 15 17:41:08 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 ./modules/recharge \ 1.8 + ./modules/list ./modules/mkdb ./modules/recharge ./modules/upgrade \ 1.9 ./tazpkg-box ./tazpkg-notify ./tazpanel/pkgs.cgi 1.10 1.11 msgmerge:
2.1 --- a/modules/recharge Sat Aug 15 12:23:33 2015 +0100 2.2 +++ b/modules/recharge Sat Aug 15 17:41:08 2015 +0300 2.3 @@ -14,33 +14,49 @@ 2.4 2.5 # Connect function libraries 2.6 . /lib/libtaz.sh 2.7 -# Get TazPkg configuration variables 2.8 -. "$root/etc/slitaz/slitaz.conf" 2.9 -. "$root/etc/slitaz/tazpkg.conf" 2.10 -PKGS_DB="$root$PKGS_DB" 2.11 2.12 -# Fallback actions 2.13 + 2.14 + 2.15 + 2.16 +# Get TazPkg working environment 2.17 +# ------------------------------ 2.18 + 2.19 +[ ! -d "$root/etc/slitaz" ] && mkdir -p "$root/etc/slitaz" 2.20 +[ ! -e "$root/etc/slitaz/slitaz.conf" ] && cp /etc/slitaz/slitaz.conf "$root/etc/slitaz" 2.21 +[ ! -e "$root/etc/slitaz/tazpkg.conf" ] && cp /etc/slitaz/tazpkg.conf "$root/etc/slitaz" 2.22 +[ ! -e "$root/etc/slitaz-release" ] && echo 'cooking' > "$root/etc/slitaz-release" 2.23 + 2.24 +# Read configuration 2.25 +if [ -n "$root" ]; then 2.26 + # Patch external conf files to correctly handle --root value 2.27 + slitaz_conf=$(mktemp); cp "$root/etc/slitaz/slitaz.conf" $slitaz_conf 2.28 + tazpkg_conf=$(mktemp); cp "$root/etc/slitaz/tazpkg.conf" $tazpkg_conf 2.29 + sed -i "s| /| $root/|g; s|\"/|\"$root/|g" $slitaz_conf $tazpkg_conf 2.30 + . $slitaz_conf; . $tazpkg_conf; rm $slitaz_conf $tazpkg_conf 2.31 +else 2.32 + . /etc/slitaz/slitaz.conf; . /etc/slitaz/tazpkg.conf 2.33 +fi 2.34 + 2.35 +# Silent make missing files 2.36 mkdir -p "$PKGS_DB" 2.37 [ ! -e "$PKGS_DB/mirror" ] && echo "$ONLINE_PKGS" > "$PKGS_DB/mirror" 2.38 2.39 2.40 + 2.41 + 2.42 # Functions 2.43 # --------- 2.44 2.45 # Download a file from specified mirror 2.46 2.47 -download_from() { 2.48 - # input: "<mirror_url>+" "file_name" 2.49 - local i 2.50 - for i in $1; do 2.51 - case "$i" in 2.52 - # Mirror URL can have a trailing slash or not. 2.53 - http://* | https://* | ftp://*) 2.54 - busybox wget -c -q -T 30 -U $UA ${i%/}/$2 2>/dev/null && break ;; 2.55 - *) 2.56 - ln -sf ${i%/}/$2 . && break ;; 2.57 - esac 2.58 - done 2.59 +get_from_mirror() { 2.60 + case "$mirror" in 2.61 + http://* | https://* | ftp://*) 2.62 + busybox wget -c -q -T 30 -U $UA "$mirror$1" 2>/dev/null;; 2.63 + *) 2.64 + ln -sf "$mirror$1" .;; 2.65 + esac 2.66 + status 2.67 } 2.68 2.69 2.70 @@ -79,7 +95,8 @@ 2.71 for path in $repo_to_recharge; do 2.72 [ ! -f $path/mirror ] && continue # skip 2.73 cd $path 2.74 - mirror="$(cat mirror)" 2.75 + # Mirror URL will have a trailing slash 2.76 + mirror="$(cat mirror)"; mirror="${mirror%/}/" 2.77 2.78 # Repository name 2.79 if [ "$path" == "$PKGS_DB" ]; then 2.80 @@ -96,33 +113,32 @@ 2.81 2.82 [ -f ID ] && mv ID ID.bak # Compatibility with "old" ID 2.83 [ -f IDs ] && mv IDs IDs.bak 2.84 - download_from "$mirror" IDs 2.85 + action 'Checking...' 2.86 + get_from_mirror IDs 2.87 + 2.88 [ -e 'IDs' ] && awk '{print $1}' IDs > ID # Compatibility with "old" ID 2.89 + [ -e 'IDs' ] && _ 'Database timestamp: %s' "$(date -d "@$(awk '{print $2}' IDs)" "+%x %R")" 2.90 2.91 # Check if recharging is needed 2.92 if [ -f 'IDs' ] && cmp -s IDs IDs.bak; then 2.93 - action 'Checking...'; status # "Fake" message 2.94 footer "$(_ 'Repository "%s" is up to date.' "$repo_name")" 2.95 rm IDs.bak ID.bak 2.96 continue 2.97 fi 2.98 rm IDs.bak ID.bak 2>/dev/null 2.99 2.100 - [ -e 'IDs' ] && _ 'Database timestamp: %s' "$(date -d "@$(awk '{print $2}' IDs)" "+%x %R")" 2.101 - 2.102 action 'Creating backup of the last packages list...' 2.103 for i in packages.desc packages.$SUM packages.txt packages.list \ 2.104 packages.equiv files.list.lzma extra.list mirrors packages.info; do 2.105 [ -f "$i" ] && mv -f $i $i.bak 2>/dev/null 2.106 done 2.107 - :; status 2.108 + :; status # Always "[ Done ]" 2.109 2.110 # Download and extract bundle: extra.list, mirrors, files-list.md5, 2.111 # packages.{info,desc,md5,txt,list,equiv} 2.112 bundle='bundle.tar.lzma' 2.113 action 'Getting "%s"...' $bundle 2.114 - download_from "$mirror" $bundle 2.115 - status 2.116 + get_from_mirror $bundle 2.117 if [ -f "$bundle" ]; then 2.118 busybox tar -xaf $bundle; rm $bundle 2.119 else 2.120 @@ -137,13 +153,11 @@ 2.121 mv $files_local.bak $files_remote 2.122 else 2.123 action 'Getting "%s"...' $files_remote 2.124 - download_from "$mirror" $files_remote 2.125 - status 2.126 + get_from_mirror $files_remote 2.127 fi 2.128 else 2.129 action 'Getting "%s"...' $files_remote 2.130 - download_from "$mirror" $files_remote 2.131 - status 2.132 + get_from_mirror $files_remote 2.133 fi 2.134 2.135 if [ ! -e "$files_remote" ]; then
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 3.2 +++ b/modules/upgrade Sat Aug 15 17:41:08 2015 +0300 3.3 @@ -0,0 +1,209 @@ 3.4 +#!/bin/sh 3.5 +# TazPkg - Tiny autonomous zone packages manager, hg.slitaz.org/tazpkg 3.6 +# upgrade - TazPkg module 3.7 +# Check for upgrades and make system up-to-date 3.8 + 3.9 + 3.10 +# Options: 3.11 + 3.12 +# Environment variables: 3.13 +# root Root of the packages DB 3.14 +# check Only check for upgrades 3.15 +# install Check and install all upgraded packages 3.16 + 3.17 + 3.18 +# Connect function libraries 3.19 +. /lib/libtaz.sh 3.20 + 3.21 + 3.22 + 3.23 + 3.24 +# Get TazPkg working environment 3.25 +# ------------------------------ 3.26 + 3.27 +[ ! -d "$root/etc/slitaz" ] && mkdir -p "$root/etc/slitaz" 3.28 +[ ! -e "$root/etc/slitaz/slitaz.conf" ] && cp /etc/slitaz/slitaz.conf "$root/etc/slitaz" 3.29 +[ ! -e "$root/etc/slitaz/tazpkg.conf" ] && cp /etc/slitaz/tazpkg.conf "$root/etc/slitaz" 3.30 +[ ! -e "$root/etc/slitaz-release" ] && echo 'cooking' > "$root/etc/slitaz-release" 3.31 + 3.32 +# Read configuration 3.33 +if [ -n "$root" ]; then 3.34 + # Patch external conf files to correctly handle --root value 3.35 + slitaz_conf=$(mktemp); cp "$root/etc/slitaz/slitaz.conf" $slitaz_conf 3.36 + tazpkg_conf=$(mktemp); cp "$root/etc/slitaz/tazpkg.conf" $tazpkg_conf 3.37 + sed -i "s| /| $root/|g; s|\"/|\"$root/|g" $slitaz_conf $tazpkg_conf 3.38 + . $slitaz_conf; . $tazpkg_conf; rm $slitaz_conf $tazpkg_conf 3.39 +else 3.40 + . /etc/slitaz/slitaz.conf; . /etc/slitaz/tazpkg.conf 3.41 +fi 3.42 + 3.43 + 3.44 + 3.45 + 3.46 +# Functions 3.47 +# --------- 3.48 + 3.49 +# Get repositories priority using $PKGS_DB/priority. 3.50 +# In this file undigest repos are called by their names and main mirror 3.51 +# by 'main'. Sort order: priority 3.52 + 3.53 +look_for_priority() { 3.54 + [ -s "$PKGS_DB/priority" ] && priority=$(cat $PKGS_DB/priority) 3.55 + 3.56 + for rep in main $(ls $PKGS_DB/undigest 2>/dev/null); do 3.57 + if [ ! -s "$PKGS_DB/priority" ] || ! grep -q ^$rep$ $PKGS_DB/priority; then 3.58 + priority=$(echo -e "$priority\n$rep") 3.59 + fi 3.60 + done 3.61 + 3.62 + priority=$(echo "$priority" | sed '/^$/d' | \ 3.63 + while read line; do 3.64 + case $line in 3.65 + (main) echo $PKGS_DB;; 3.66 + (*) echo $PKGS_DB/undigest/$line;; 3.67 + esac 3.68 + done) 3.69 +} 3.70 + 3.71 + 3.72 + 3.73 + 3.74 +time="$(date +%s)" 3.75 + 3.76 +# Recharge packages databases (if necessary) (respects "root" value) 3.77 +tazpkg recharge >&2 3.78 + 3.79 +echo -n > $UP_LIST 3.80 +blocked_counter=$(mktemp) 3.81 +tmp_up_list=$(mktemp) 3.82 + 3.83 +look_for_priority 3.84 +repo_number=1 3.85 +for repo in $priority; do 3.86 + if [ "$repo" == "$PKGS_DB" ]; then 3.87 + repo_name='Main' 3.88 + else 3.89 + repo_name="$(basename "$repo")" 3.90 + fi 3.91 + 3.92 + [ ! -f "$repo/packages.info" ] && continue 3.93 + { 3.94 + cat $BLOCKED | awk '{printf "%s\t%s\n", $1, "b"}'; 3.95 + cat $PKGS_DB/installed.info | awk -F$'\t' '{printf "%s\t%s\t%s\t%s\n", $1, "i", $2, $9}'; 3.96 + cat $repo/packages.info | awk -F$'\t' '{printf "%s\t%s\t%s\t%s\n", $1, "p", $2, $9}' 3.97 + } | sort -t$'\t' -k1,1 | awk -F$'\t' \ 3.98 + -vnewbuild="$(_ 'New build')" -vcolornewbuild="$(emsg '<c 34>')" \ 3.99 + -vnewver='→ ' -vcolornewver="$(emsg '<c 32>')" \ 3.100 + -vblocked=" ($(_ 'Blocked'))" -vcolorblocked="$(emsg '<c 31>')" \ 3.101 + -vcolor0="$(emsg '</c>')" \ 3.102 + -vreponum=$repo_number -vreponame=$repo_name \ 3.103 + -vuplist="$UP_LIST" -vblocked_counter="$blocked_counter" \ 3.104 +'{ 3.105 + 3.106 + if ($1 != p) { 3.107 + if (vi && vp) { 3.108 + bb = (b=="") ? "i" : "b" 3.109 + if ("" vi != vp) { # important: compare as strings 3.110 + startc = (b=="") ? colornewver : colorblocked; 3.111 + 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; 3.112 + print p >> uplist; 3.113 + if (b!="") printf 1 >> blocked_counter; 3.114 + } else if (mi != mp) { 3.115 + startc = (b=="") ? colornewbuild : colorblocked; 3.116 + 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; 3.117 + print p >> uplist; 3.118 + if (b!="") printf 1 >> blocked_counter; 3.119 + } 3.120 + } 3.121 + p = $1; b = b1 = b2 = vi = mi = vp = mp = ""; 3.122 + } 3.123 + if ($2 == "b") { b = blocked; b1 = bl1; b2 = bl2; } 3.124 + if ($2 == "i") { vi = $3; mi = $4; } 3.125 + if ($2 == "p") { vp = $3; mp = $4; } 3.126 +}' >> $tmp_up_list 3.127 + 3.128 + repo_number=$((repo_number + 1)) 3.129 + 3.130 +done 3.131 + 3.132 +case "$output" in 3.133 + html) 3.134 + cat <<EOT 3.135 +<table class="wide zebra"> 3.136 + <thead> 3.137 + <tr><td>$(_ 'Package')</td><td>$(_ 'Repository')</td><td>$(_ 'Version')</td><td>$(_ 'Status')</td></tr> 3.138 + </thead> 3.139 + <tbody> 3.140 +EOT 3.141 + sort -t$'\t' -k1,3 $tmp_up_list | awk -F$'\t' '{ 3.142 + if($4=="Main"){repoicon="slitaz"}else{repoicon="web"} 3.143 + if($6=="b"){pkgicon="pkgib"}else{pkgicon="pkgi"} 3.144 + 3.145 + printf "<tr><td><input type=\"checkbox\" name=\"pkg\" value=\"%s\"/>", $1; 3.146 + printf "<a data-icon=\"%s\" href=\"?info=%s\">%s</a></td>", pkgicon, $1, $1; 3.147 + printf "<td><span data-icon=\"%s\">%s</span></td>", repoicon, $4; 3.148 + printf "<td>%s</td>", $2; 3.149 + printf "<td>%s</td></tr>\n", $5; 3.150 + }' 3.151 + echo '</tbody></table>' ;; 3.152 + *) 3.153 + emsg "<n>$(_ 'Package')<i 26>$(_ 'Repository')<i 38>$(_ 'Version')<i 49>$(_ 'Status')<->" 3.154 + sort -t$'\t' -k1,3 $tmp_up_list | awk -F$'\t' \ 3.155 + '{printf "%-24s %-11s %-10s %s\n", $1, $4, $2, $5}';; 3.156 +esac 3.157 + 3.158 +sed -i /^$/d $UP_LIST 3.159 +upnb=$(wc -l < $UP_LIST) 3.160 +pkgs=$(wc -l < $PKGS_DB/installed.info) 3.161 +time=$(($(date +%s) - $time)) 3.162 +if [ "$upnb" -eq 0 ]; then 3.163 + install="n" 3.164 + _ 'System is up-to-date...' 3.165 +fi 3.166 + 3.167 +if [ "$upnb" -ne 0 ]; then 3.168 + blocked_count="$(wc -m < $blocked_counter)" 3.169 + 3.170 + blocked="$(_p \ 3.171 + '%s blocked' \ 3.172 + '%s blocked' $blocked_count \ 3.173 + $blocked_count)" 3.174 + 3.175 + footer "$(_p \ 3.176 + 'You have %s available upgrade (%s)' \ 3.177 + 'You have %s available upgrades (%s)' $upnb \ 3.178 + $upnb "$blocked")" 3.179 +fi 3.180 +emsg "$(_p \ 3.181 + '%s installed package scanned in %ds' \ 3.182 + '%s installed packages scanned in %ds' $pkgs \ 3.183 + "<c 32>$pkgs</c>" $time)" 3.184 + 3.185 + 3.186 +# Clean 3.187 +rm $blocked_counter $tmp_up_list 3.188 + 3.189 +# Pkgs to upgrade ? Skip, let install them all, or ask user 3.190 +[ -n "$check" ] && exit 0 3.191 +if [ "$upnb" -gt 0 ]; then 3.192 + if [ -n "$install" ]; then 3.193 + answer=0 3.194 + else 3.195 + confirm "$(_ 'Do you wish to install them now? (y/N)')" 3.196 + answer=$? 3.197 + fi 3.198 + case "$answer" in 3.199 + 0) 3.200 + for pkg in $(cat $UP_LIST); do 3.201 + echo 'y' | tazpkg -gi "$pkg" --forced #--reason="upgrade" 3.202 + done 3.203 + # List is generated each time and must be cleaned so 3.204 + # tazpkg-notify doesn't find upgrades anymore. 3.205 + rm $UP_LIST; touch $UP_LIST ;; 3.206 + *) 3.207 + _ 'Leaving without any upgrades installed.' 3.208 + newline 3.209 + exit 0 ;; 3.210 + esac 3.211 +fi 3.212 +newline
4.1 --- a/po/fr.po Sat Aug 15 12:23:33 2015 +0100 4.2 +++ b/po/fr.po Sat Aug 15 17:41:08 2015 +0300 4.3 @@ -2025,13 +2025,6 @@ 4.4 #~ msgid "Web" 4.5 #~ msgstr "Internet" 4.6 4.7 -#~ msgid "all" 4.8 -#~ msgstr "Toutes" 4.9 - 4.10 -#, fuzzy 4.11 -#~ msgid "extra" 4.12 -#~ msgstr "supplémentaire" 4.13 - 4.14 #~ msgid "Repositories" 4.15 #~ msgstr "Dépôts" 4.16
5.1 --- a/po/ru.po Sat Aug 15 12:23:33 2015 +0100 5.2 +++ b/po/ru.po Sat Aug 15 17:41:08 2015 +0300 5.3 @@ -2043,6 +2043,9 @@ 5.4 msgid "Packages suggested by %s" 5.5 msgstr "Пакеты, предложенные пакетом %s" 5.6 5.7 +msgid "State" 5.8 +msgstr "Состояние" 5.9 + 5.10 #~ msgid "Unknown option \"%s\"." 5.11 #~ msgstr "Неизвестный параметр «%s»." 5.12
6.1 --- a/tazpkg Sat Aug 15 12:23:33 2015 +0100 6.2 +++ b/tazpkg Sat Aug 15 17:41:08 2015 +0300 6.3 @@ -78,14 +78,14 @@ 6.4 6.5 # Path to tazpkg used dir and configuration files 6.6 MIRROR="$PKGS_DB/mirror" 6.7 -BLOCKED="$PKGS_DB/blocked-packages.list" 6.8 -UP_LIST="$PKGS_DB/packages.up" 6.9 +export BLOCKED="$PKGS_DB/blocked-packages.list" 6.10 +export UP_LIST="$PKGS_DB/packages.up" 6.11 DEFAULT_MIRROR="$ONLINE_PKGS" 6.12 6.13 # TazPkg version 6.14 VERSION=$(awk -F$'\t' '$1=="tazpkg"{print $2}' $PKGS_DB/installed.info) 6.15 # User Agent 6.16 -UA="TazPkg-$VERSION" 6.17 +export UA="TazPkg-$VERSION" 6.18 6.19 #title 'DEBUG'; emsg "<b>COMMAND</b>=\"$COMMAND\"\n<b>PACKAGE</b>=\"$PACKAGE\"\n<b>PACKAGE_FILE</b>=\"$PACKAGE_FILE\"\n<b>TARGET_DIR</b>=\"$TARGET_DIR\"\n<b>TOP_DIR</b>=\"$TOP_DIR\"\n<b>TMP_DIR</b>=\"$TMP_DIR\"\n<b>INSTALL_LIST</b>=\"$INSTALL_LIST\"\n<b>SAVE_CACHE_DIR</b>=\"$SAVE_CACHE_DIR\"\n<b>MIRROR</b>=\"$MIRROR\"\n<b>BLOCKED</b>=\"$BLOCKED\"\n<b>UP_LIST</b>=\"$UP_LIST\"\n<b>DEFAULT_MIRROR</b>=\"$DEFAULT_MIRROR\"\n<b>VERSION</b>=\"$VERSION\""; footer 6.20 6.21 @@ -1248,11 +1248,18 @@ 6.22 *\ $i\ *) continue;; 6.23 esac 6.24 ALL_DEPS="$ALL_DEPS $i" 6.25 - [ -n "$2" ] && echo "$2$i ($(fgrep -A 3 $i $PKGS_DB/packages.txt | \ 6.26 - tail -1 | sed 's/.*(\([^ ]*\).*/\1/'))" 6.27 - [ -f $i/receipt ] || continue 6.28 - DEPENDS="" 6.29 - . $i/receipt 6.30 + 6.31 + if [ -z "$mark" ]; then 6.32 + ii="$i" 6.33 + else 6.34 + ii="- $i"; grep -q ^$i$'\t' "$PKGS_DB/installed.info" && ii="+ $i" 6.35 + fi 6.36 + [ -n "$2" ] && echo "$2$ii ($(awk -F$'\t' -vp="$i" ' 6.37 + $1==p{split($7,s," ");print s[2]}' "$PKGS_DB/packages.info"))" 6.38 + 6.39 + DEPENDS="$(awk -F$'\t' -vp="$i" '$1==p{print $8 " "}' "$PKGS_DB/installed.info")" 6.40 + [ -z "$DEPENDS" ] && \ 6.41 + DEPENDS="$(awk -F$'\t' -vp="$i" '$1==p{print $8 " "}' "$PKGS_DB/packages.info")" 6.42 [ -n "$DEPENDS" ] && dep_scan "$DEPENDS" "$2 " 6.43 done 6.44 } 6.45 @@ -1263,36 +1270,40 @@ 6.46 rdep_scan() { 6.47 SEARCH="$1" 6.48 6.49 - for i in * ; do 6.50 - DEPENDS='' 6.51 - . $i/receipt 6.52 - echo "$i $(echo $DEPENDS)" 6.53 - done | busybox awk -v search=$SEARCH ' 6.54 -function show_deps(deps, all_deps, pkg, space) 6.55 + DB='installed'; [ -n "$all" ] && DB='packages' 6.56 + 6.57 + awk -F$'\t' '$8 {print $1 " " $8}' "$PKGS_DB/$DB.info" | \ 6.58 + busybox awk -F' ' -v search="$SEARCH" ' 6.59 +function show_deps(pkg, space, i, n, mydeps) { 6.60 + if (processed[pkg]) return 6.61 + processed[pkg] = 1; 6.62 + 6.63 + if (space) printf "%s %s\n", space, pkg; 6.64 + 6.65 + n = split(deps[pkg], mydeps, " "); 6.66 + for (i = 1; i <= n; i++) 6.67 + show_deps(mydeps[i], "==" space); 6.68 +} 6.69 + 6.70 { 6.71 - if (all_deps[pkg] == 1) return 6.72 - all_deps[pkg] = 1 6.73 - if (space != "") printf "%s %s\n",space,pkg 6.74 - for (i = 1, n = split(deps[pkg], mydeps, " "); i <= n; i++) { 6.75 - show_deps(deps, all_deps, mydeps[i],"==" space) 6.76 - } 6.77 + for (i = 2; i <= NF; i++) 6.78 + deps[$i] = deps[$i] " " $1; 6.79 } 6.80 6.81 -{ 6.82 - all_deps[$1] = 0 6.83 - for (i = 2; i <= NF; i++) 6.84 - deps[$i] = deps[$i] " " $1 6.85 -} 6.86 - 6.87 END { 6.88 - show_deps(deps, all_deps, search, "") 6.89 + show_deps(search, "") 6.90 } 6.91 ' | while read spc pkg; do 6.92 + if [ -z "$mark" ]; then 6.93 + pkgi="$pkg" 6.94 + else 6.95 + pkgi="- $pkg"; grep -q ^$pkg$'\t' "$PKGS_DB/installed.info" && pkgi="+ $pkg" 6.96 + fi 6.97 + 6.98 echo -n $spc | sed 's/=/ /g' 6.99 - echo -n $pkg 6.100 - echo -n ' (' 6.101 - fgrep -A 3 $pkg $PKGS_DB/packages.txt | tail -1 | \ 6.102 - sed 's/.*(\([^ ]*\).*/\1)/' 6.103 + 6.104 + echo "$pkgi ($(awk -F$'\t' -vp="$pkg" '$1==p{split($7,s," ");print s[2]}' \ 6.105 + "$PKGS_DB/$DB.info"))" 6.106 done 6.107 } 6.108 6.109 @@ -2043,7 +2054,6 @@ 6.110 # must have only the chosen main mirror. 6.111 # 6.112 check_root $@ 6.113 - export UA 6.114 @@MODULES@@/recharge $2 6.115 ;; 6.116 6.117 @@ -2055,7 +2065,7 @@ 6.118 6.119 6.120 up|upgrade) 6.121 - check_root 6.122 + check_root $@ 6.123 # 6.124 # This is the new way to upgrade packages making 'upgrade' and 6.125 # upgradeable out-of-date. This new way is much, much more faster! 6.126 @@ -2064,151 +2074,12 @@ 6.127 # 6.128 for opt in $@; do 6.129 case "$opt" in 6.130 - -i) install='yes';; 6.131 - -c) check='yes';; 6.132 + -i) export install='yes';; 6.133 + -c) export check='yes';; 6.134 esac 6.135 done 6.136 6.137 - time="$(date +%s)" 6.138 - 6.139 - # Recharge packages databases (if necessary) 6.140 - tazpkg recharge >/dev/null 6.141 - 6.142 - cd $INSTALLED 6.143 - echo -n > $UP_LIST 6.144 - blocked_counter=$(mktemp) 6.145 - tmp_up_list=$(mktemp) 6.146 - 6.147 - look_for_priority 6.148 - repo_number=1 6.149 - for repo in $priority; do 6.150 - if [ "$repo" == "$PKGS_DB" ]; then 6.151 - repo_name='Main' 6.152 - else 6.153 - repo_name="$(basename "$repo")" 6.154 - fi 6.155 - 6.156 - [ ! -f "$repo/packages.info" ] && continue 6.157 - { 6.158 - cat $PKGS_DB/blocked-packages.list | awk '{printf "%s\t%s\n", $1, "b"}'; 6.159 - cat $PKGS_DB/installed.info | awk -F$'\t' '{printf "%s\t%s\t%s\t%s\n", $1, "i", $2, $9}'; 6.160 - cat $repo/packages.info | awk -F$'\t' '{printf "%s\t%s\t%s\t%s\n", $1, "p", $2, $9}' 6.161 - } | sort -t$'\t' -k1,1 | awk -F$'\t' \ 6.162 - -vnewbuild="$(_ 'New build')" -vcolornewbuild="$(emsg '<c 34>')" \ 6.163 - -vnewver='→ ' -vcolornewver="$(emsg '<c 32>')" \ 6.164 - -vblocked=" ($(_ 'Blocked'))" -vcolorblocked="$(emsg '<c 31>')" \ 6.165 - -vcolor0="$(emsg '</c>')" \ 6.166 - -vreponum=$repo_number -vreponame=$repo_name \ 6.167 - -vuplist="$UP_LIST" -vblocked_counter="$blocked_counter" \ 6.168 -'{ 6.169 - 6.170 - if ($1 != p) { 6.171 - if (vi && vp) { 6.172 - bb = (b=="") ? "i" : "b" 6.173 - if ("" vi != vp) { # important: compare as strings 6.174 - startc = (b=="") ? colornewver : colorblocked; 6.175 - 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; 6.176 - print p >> uplist; 6.177 - if (b!="") printf 1 >> blocked_counter; 6.178 - } else if (mi != mp) { 6.179 - startc = (b=="") ? colornewbuild : colorblocked; 6.180 - 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; 6.181 - print p >> uplist; 6.182 - if (b!="") printf 1 >> blocked_counter; 6.183 - } 6.184 - } 6.185 - p = $1; b = b1 = b2 = vi = mi = vp = mp = ""; 6.186 - } 6.187 - if ($2 == "b") { b = blocked; b1 = bl1; b2 = bl2; } 6.188 - if ($2 == "i") { vi = $3; mi = $4; } 6.189 - if ($2 == "p") { vp = $3; mp = $4; } 6.190 -}' >> $tmp_up_list 6.191 - 6.192 - repo_number=$((repo_number + 1)) 6.193 - 6.194 - done 6.195 - 6.196 - case "$output" in 6.197 - html) 6.198 - cat <<EOT 6.199 -<table class="wide zebra"> 6.200 - <thead> 6.201 - <tr><td>$(_ 'Package')</td><td>$(_ 'Repository')</td><td>$(_ 'Version')</td><td>$(_ 'Status')</td></tr> 6.202 - </thead> 6.203 - <tbody> 6.204 -EOT 6.205 - sort -t$'\t' -k1,3 $tmp_up_list | awk -F$'\t' '{ 6.206 - if($4=="Main"){repoicon="slitaz"}else{repoicon="web"} 6.207 - if($6=="b"){pkgicon="pkgib"}else{pkgicon="pkgi"} 6.208 - 6.209 - printf "<tr><td><input type=\"checkbox\" name=\"pkg\" value=\"%s\"/>", $1; 6.210 - printf "<a data-icon=\"%s\" href=\"?info=%s\">%s</a></td>", pkgicon, $1, $1; 6.211 - printf "<td><span data-icon=\"%s\">%s</span></td>", repoicon, $4; 6.212 - printf "<td>%s</td>", $2; 6.213 - printf "<td>%s</td></tr>\n", $5; 6.214 - }' 6.215 - echo '</tbody></table>' ;; 6.216 - *) 6.217 - emsg "<n>$(_ 'Package')<i 26>$(_ 'Repository')<i 38>$(_ 'Version')<i 49>$(_ 'Status')<->" 6.218 - sort -t$'\t' -k1,3 $tmp_up_list | awk -F$'\t' \ 6.219 - '{printf "%-24s %-11s %-10s %s\n", $1, $4, $2, $5}';; 6.220 - esac 6.221 - 6.222 - sed -i /^$/d $UP_LIST 6.223 - upnb=$(wc -l < $UP_LIST) 6.224 - pkgs=$(ls | wc -l) 6.225 - time=$(($(date +%s) - $time)) 6.226 - if [ "$upnb" -eq 0 ]; then 6.227 - install="n" 6.228 - _ 'System is up-to-date...' 6.229 - fi 6.230 - 6.231 - if [ "$upnb" -ne 0 ]; then 6.232 - blocked_count="$(wc -m < $blocked_counter)" 6.233 - 6.234 - blocked="$(_p \ 6.235 - '%s blocked' \ 6.236 - '%s blocked' $blocked_count \ 6.237 - $blocked_count)" 6.238 - 6.239 - footer "$(_p \ 6.240 - 'You have %s available upgrade (%s)' \ 6.241 - 'You have %s available upgrades (%s)' $upnb \ 6.242 - $upnb "$blocked")" 6.243 - fi 6.244 - emsg "$(_p \ 6.245 - '%s installed package scanned in %ds' \ 6.246 - '%s installed packages scanned in %ds' $pkgs \ 6.247 - "<c 32>$pkgs</c>" $time)" 6.248 - 6.249 - 6.250 - # Clean 6.251 - rm $blocked_counter $tmp_up_list 6.252 - 6.253 - # Pkgs to upgrade ? Skip, let install them all or ask user 6.254 - [ -n "$check" ] && exit 0 6.255 - if [ "$upnb" -gt 0 ]; then 6.256 - if [ -n "$install" ]; then 6.257 - answer=0 6.258 - else 6.259 - confirm "$(_ 'Do you wish to install them now? (y/N)')" 6.260 - answer=$? 6.261 - fi 6.262 - case "$answer" in 6.263 - 0) 6.264 - for pkg in $(cat $UP_LIST); do 6.265 - echo 'y' | tazpkg -gi "$pkg" --forced #--reason="upgrade" 6.266 - done 6.267 - # List is generated each time and must be cleaned so 6.268 - # tazpkg-notify doesn't find upgrades anymore. 6.269 - rm $UP_LIST; touch $UP_LIST ;; 6.270 - *) 6.271 - _ 'Leaving without any upgrades installed.' 6.272 - newline 6.273 - exit 0 ;; 6.274 - esac 6.275 - fi 6.276 - newline 6.277 + @@MODULES@@/upgrade 6.278 ;; 6.279 6.280 6.281 @@ -2694,20 +2565,34 @@ 6.282 6.283 depends) 6.284 # Display dependencies tree 6.285 - cd $INSTALLED 6.286 - ALL_DEPS='' 6.287 - if [ -f "$2/receipt" ]; then 6.288 - dep_scan $2 '' 6.289 - fi ;; 6.290 + unset ALL_DEPS 6.291 + mkdir $TMP_DIR 6.292 + dep_scan $2 '' | tee "$TMP_DIR/depends" 6.293 + if [ -n "$total" ]; then 6.294 + separator 6.295 + NUM="$(wc -l < "$TMP_DIR/depends")" 6.296 + TOTAL="$(sed 's|.*(\([^)]*\))|\1|' "$TMP_DIR/depends" | hrsum)" 6.297 + _p 'Total: %s package (%s)' 'Total: %s packages (%s)' "$NUM" \ 6.298 + "$NUM" "$TOTAL" 6.299 + newline 6.300 + 6.301 + if [ -n "$mark" ]; then 6.302 + NUM="$(grep '^ *-' "$TMP_DIR/depends" | wc -l)" 6.303 + TOTAL="$(grep '^ *-' "$TMP_DIR/depends" | sed 's|.*(\([^)]*\))|\1|' | hrsum)" 6.304 + _p 'To install: %s package (%s)' 'To install: %s packages (%s)' "$NUM" \ 6.305 + "$NUM" "$TOTAL" 6.306 + newline 6.307 + fi 6.308 + fi 6.309 + rm -rf "$TMP_DIR" 6.310 + ;; 6.311 6.312 6.313 rdepends) 6.314 # Display reverse dependencies tree 6.315 cd $INSTALLED 6.316 - ALL_DEPS='' 6.317 - if [ -f "$2/receipt" ]; then 6.318 - rdep_scan $2 6.319 - fi 6.320 + unset ALL_DEPS 6.321 + rdep_scan "$2" 6.322 ;; 6.323 6.324