tazpkg diff 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 | f1c82b2d20aa |
children | 358a978f45a9 |
line diff
1.1 --- a/tazpkg Fri Aug 14 16:55:14 2015 +0300 1.2 +++ b/tazpkg Sat Aug 15 17:41:08 2015 +0300 1.3 @@ -78,14 +78,14 @@ 1.4 1.5 # Path to tazpkg used dir and configuration files 1.6 MIRROR="$PKGS_DB/mirror" 1.7 -BLOCKED="$PKGS_DB/blocked-packages.list" 1.8 -UP_LIST="$PKGS_DB/packages.up" 1.9 +export BLOCKED="$PKGS_DB/blocked-packages.list" 1.10 +export UP_LIST="$PKGS_DB/packages.up" 1.11 DEFAULT_MIRROR="$ONLINE_PKGS" 1.12 1.13 # TazPkg version 1.14 VERSION=$(awk -F$'\t' '$1=="tazpkg"{print $2}' $PKGS_DB/installed.info) 1.15 # User Agent 1.16 -UA="TazPkg-$VERSION" 1.17 +export UA="TazPkg-$VERSION" 1.18 1.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 1.20 1.21 @@ -1248,11 +1248,18 @@ 1.22 *\ $i\ *) continue;; 1.23 esac 1.24 ALL_DEPS="$ALL_DEPS $i" 1.25 - [ -n "$2" ] && echo "$2$i ($(fgrep -A 3 $i $PKGS_DB/packages.txt | \ 1.26 - tail -1 | sed 's/.*(\([^ ]*\).*/\1/'))" 1.27 - [ -f $i/receipt ] || continue 1.28 - DEPENDS="" 1.29 - . $i/receipt 1.30 + 1.31 + if [ -z "$mark" ]; then 1.32 + ii="$i" 1.33 + else 1.34 + ii="- $i"; grep -q ^$i$'\t' "$PKGS_DB/installed.info" && ii="+ $i" 1.35 + fi 1.36 + [ -n "$2" ] && echo "$2$ii ($(awk -F$'\t' -vp="$i" ' 1.37 + $1==p{split($7,s," ");print s[2]}' "$PKGS_DB/packages.info"))" 1.38 + 1.39 + DEPENDS="$(awk -F$'\t' -vp="$i" '$1==p{print $8 " "}' "$PKGS_DB/installed.info")" 1.40 + [ -z "$DEPENDS" ] && \ 1.41 + DEPENDS="$(awk -F$'\t' -vp="$i" '$1==p{print $8 " "}' "$PKGS_DB/packages.info")" 1.42 [ -n "$DEPENDS" ] && dep_scan "$DEPENDS" "$2 " 1.43 done 1.44 } 1.45 @@ -1263,36 +1270,40 @@ 1.46 rdep_scan() { 1.47 SEARCH="$1" 1.48 1.49 - for i in * ; do 1.50 - DEPENDS='' 1.51 - . $i/receipt 1.52 - echo "$i $(echo $DEPENDS)" 1.53 - done | busybox awk -v search=$SEARCH ' 1.54 -function show_deps(deps, all_deps, pkg, space) 1.55 + DB='installed'; [ -n "$all" ] && DB='packages' 1.56 + 1.57 + awk -F$'\t' '$8 {print $1 " " $8}' "$PKGS_DB/$DB.info" | \ 1.58 + busybox awk -F' ' -v search="$SEARCH" ' 1.59 +function show_deps(pkg, space, i, n, mydeps) { 1.60 + if (processed[pkg]) return 1.61 + processed[pkg] = 1; 1.62 + 1.63 + if (space) printf "%s %s\n", space, pkg; 1.64 + 1.65 + n = split(deps[pkg], mydeps, " "); 1.66 + for (i = 1; i <= n; i++) 1.67 + show_deps(mydeps[i], "==" space); 1.68 +} 1.69 + 1.70 { 1.71 - if (all_deps[pkg] == 1) return 1.72 - all_deps[pkg] = 1 1.73 - if (space != "") printf "%s %s\n",space,pkg 1.74 - for (i = 1, n = split(deps[pkg], mydeps, " "); i <= n; i++) { 1.75 - show_deps(deps, all_deps, mydeps[i],"==" space) 1.76 - } 1.77 + for (i = 2; i <= NF; i++) 1.78 + deps[$i] = deps[$i] " " $1; 1.79 } 1.80 1.81 -{ 1.82 - all_deps[$1] = 0 1.83 - for (i = 2; i <= NF; i++) 1.84 - deps[$i] = deps[$i] " " $1 1.85 -} 1.86 - 1.87 END { 1.88 - show_deps(deps, all_deps, search, "") 1.89 + show_deps(search, "") 1.90 } 1.91 ' | while read spc pkg; do 1.92 + if [ -z "$mark" ]; then 1.93 + pkgi="$pkg" 1.94 + else 1.95 + pkgi="- $pkg"; grep -q ^$pkg$'\t' "$PKGS_DB/installed.info" && pkgi="+ $pkg" 1.96 + fi 1.97 + 1.98 echo -n $spc | sed 's/=/ /g' 1.99 - echo -n $pkg 1.100 - echo -n ' (' 1.101 - fgrep -A 3 $pkg $PKGS_DB/packages.txt | tail -1 | \ 1.102 - sed 's/.*(\([^ ]*\).*/\1)/' 1.103 + 1.104 + echo "$pkgi ($(awk -F$'\t' -vp="$pkg" '$1==p{split($7,s," ");print s[2]}' \ 1.105 + "$PKGS_DB/$DB.info"))" 1.106 done 1.107 } 1.108 1.109 @@ -2043,7 +2054,6 @@ 1.110 # must have only the chosen main mirror. 1.111 # 1.112 check_root $@ 1.113 - export UA 1.114 @@MODULES@@/recharge $2 1.115 ;; 1.116 1.117 @@ -2055,7 +2065,7 @@ 1.118 1.119 1.120 up|upgrade) 1.121 - check_root 1.122 + check_root $@ 1.123 # 1.124 # This is the new way to upgrade packages making 'upgrade' and 1.125 # upgradeable out-of-date. This new way is much, much more faster! 1.126 @@ -2064,151 +2074,12 @@ 1.127 # 1.128 for opt in $@; do 1.129 case "$opt" in 1.130 - -i) install='yes';; 1.131 - -c) check='yes';; 1.132 + -i) export install='yes';; 1.133 + -c) export check='yes';; 1.134 esac 1.135 done 1.136 1.137 - time="$(date +%s)" 1.138 - 1.139 - # Recharge packages databases (if necessary) 1.140 - tazpkg recharge >/dev/null 1.141 - 1.142 - cd $INSTALLED 1.143 - echo -n > $UP_LIST 1.144 - blocked_counter=$(mktemp) 1.145 - tmp_up_list=$(mktemp) 1.146 - 1.147 - look_for_priority 1.148 - repo_number=1 1.149 - for repo in $priority; do 1.150 - if [ "$repo" == "$PKGS_DB" ]; then 1.151 - repo_name='Main' 1.152 - else 1.153 - repo_name="$(basename "$repo")" 1.154 - fi 1.155 - 1.156 - [ ! -f "$repo/packages.info" ] && continue 1.157 - { 1.158 - cat $PKGS_DB/blocked-packages.list | awk '{printf "%s\t%s\n", $1, "b"}'; 1.159 - cat $PKGS_DB/installed.info | awk -F$'\t' '{printf "%s\t%s\t%s\t%s\n", $1, "i", $2, $9}'; 1.160 - cat $repo/packages.info | awk -F$'\t' '{printf "%s\t%s\t%s\t%s\n", $1, "p", $2, $9}' 1.161 - } | sort -t$'\t' -k1,1 | awk -F$'\t' \ 1.162 - -vnewbuild="$(_ 'New build')" -vcolornewbuild="$(emsg '<c 34>')" \ 1.163 - -vnewver='→ ' -vcolornewver="$(emsg '<c 32>')" \ 1.164 - -vblocked=" ($(_ 'Blocked'))" -vcolorblocked="$(emsg '<c 31>')" \ 1.165 - -vcolor0="$(emsg '</c>')" \ 1.166 - -vreponum=$repo_number -vreponame=$repo_name \ 1.167 - -vuplist="$UP_LIST" -vblocked_counter="$blocked_counter" \ 1.168 -'{ 1.169 - 1.170 - if ($1 != p) { 1.171 - if (vi && vp) { 1.172 - bb = (b=="") ? "i" : "b" 1.173 - if ("" vi != vp) { # important: compare as strings 1.174 - startc = (b=="") ? colornewver : colorblocked; 1.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; 1.176 - print p >> uplist; 1.177 - if (b!="") printf 1 >> blocked_counter; 1.178 - } else if (mi != mp) { 1.179 - startc = (b=="") ? colornewbuild : colorblocked; 1.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; 1.181 - print p >> uplist; 1.182 - if (b!="") printf 1 >> blocked_counter; 1.183 - } 1.184 - } 1.185 - p = $1; b = b1 = b2 = vi = mi = vp = mp = ""; 1.186 - } 1.187 - if ($2 == "b") { b = blocked; b1 = bl1; b2 = bl2; } 1.188 - if ($2 == "i") { vi = $3; mi = $4; } 1.189 - if ($2 == "p") { vp = $3; mp = $4; } 1.190 -}' >> $tmp_up_list 1.191 - 1.192 - repo_number=$((repo_number + 1)) 1.193 - 1.194 - done 1.195 - 1.196 - case "$output" in 1.197 - html) 1.198 - cat <<EOT 1.199 -<table class="wide zebra"> 1.200 - <thead> 1.201 - <tr><td>$(_ 'Package')</td><td>$(_ 'Repository')</td><td>$(_ 'Version')</td><td>$(_ 'Status')</td></tr> 1.202 - </thead> 1.203 - <tbody> 1.204 -EOT 1.205 - sort -t$'\t' -k1,3 $tmp_up_list | awk -F$'\t' '{ 1.206 - if($4=="Main"){repoicon="slitaz"}else{repoicon="web"} 1.207 - if($6=="b"){pkgicon="pkgib"}else{pkgicon="pkgi"} 1.208 - 1.209 - printf "<tr><td><input type=\"checkbox\" name=\"pkg\" value=\"%s\"/>", $1; 1.210 - printf "<a data-icon=\"%s\" href=\"?info=%s\">%s</a></td>", pkgicon, $1, $1; 1.211 - printf "<td><span data-icon=\"%s\">%s</span></td>", repoicon, $4; 1.212 - printf "<td>%s</td>", $2; 1.213 - printf "<td>%s</td></tr>\n", $5; 1.214 - }' 1.215 - echo '</tbody></table>' ;; 1.216 - *) 1.217 - emsg "<n>$(_ 'Package')<i 26>$(_ 'Repository')<i 38>$(_ 'Version')<i 49>$(_ 'Status')<->" 1.218 - sort -t$'\t' -k1,3 $tmp_up_list | awk -F$'\t' \ 1.219 - '{printf "%-24s %-11s %-10s %s\n", $1, $4, $2, $5}';; 1.220 - esac 1.221 - 1.222 - sed -i /^$/d $UP_LIST 1.223 - upnb=$(wc -l < $UP_LIST) 1.224 - pkgs=$(ls | wc -l) 1.225 - time=$(($(date +%s) - $time)) 1.226 - if [ "$upnb" -eq 0 ]; then 1.227 - install="n" 1.228 - _ 'System is up-to-date...' 1.229 - fi 1.230 - 1.231 - if [ "$upnb" -ne 0 ]; then 1.232 - blocked_count="$(wc -m < $blocked_counter)" 1.233 - 1.234 - blocked="$(_p \ 1.235 - '%s blocked' \ 1.236 - '%s blocked' $blocked_count \ 1.237 - $blocked_count)" 1.238 - 1.239 - footer "$(_p \ 1.240 - 'You have %s available upgrade (%s)' \ 1.241 - 'You have %s available upgrades (%s)' $upnb \ 1.242 - $upnb "$blocked")" 1.243 - fi 1.244 - emsg "$(_p \ 1.245 - '%s installed package scanned in %ds' \ 1.246 - '%s installed packages scanned in %ds' $pkgs \ 1.247 - "<c 32>$pkgs</c>" $time)" 1.248 - 1.249 - 1.250 - # Clean 1.251 - rm $blocked_counter $tmp_up_list 1.252 - 1.253 - # Pkgs to upgrade ? Skip, let install them all or ask user 1.254 - [ -n "$check" ] && exit 0 1.255 - if [ "$upnb" -gt 0 ]; then 1.256 - if [ -n "$install" ]; then 1.257 - answer=0 1.258 - else 1.259 - confirm "$(_ 'Do you wish to install them now? (y/N)')" 1.260 - answer=$? 1.261 - fi 1.262 - case "$answer" in 1.263 - 0) 1.264 - for pkg in $(cat $UP_LIST); do 1.265 - echo 'y' | tazpkg -gi "$pkg" --forced #--reason="upgrade" 1.266 - done 1.267 - # List is generated each time and must be cleaned so 1.268 - # tazpkg-notify doesn't find upgrades anymore. 1.269 - rm $UP_LIST; touch $UP_LIST ;; 1.270 - *) 1.271 - _ 'Leaving without any upgrades installed.' 1.272 - newline 1.273 - exit 0 ;; 1.274 - esac 1.275 - fi 1.276 - newline 1.277 + @@MODULES@@/upgrade 1.278 ;; 1.279 1.280 1.281 @@ -2694,20 +2565,34 @@ 1.282 1.283 depends) 1.284 # Display dependencies tree 1.285 - cd $INSTALLED 1.286 - ALL_DEPS='' 1.287 - if [ -f "$2/receipt" ]; then 1.288 - dep_scan $2 '' 1.289 - fi ;; 1.290 + unset ALL_DEPS 1.291 + mkdir $TMP_DIR 1.292 + dep_scan $2 '' | tee "$TMP_DIR/depends" 1.293 + if [ -n "$total" ]; then 1.294 + separator 1.295 + NUM="$(wc -l < "$TMP_DIR/depends")" 1.296 + TOTAL="$(sed 's|.*(\([^)]*\))|\1|' "$TMP_DIR/depends" | hrsum)" 1.297 + _p 'Total: %s package (%s)' 'Total: %s packages (%s)' "$NUM" \ 1.298 + "$NUM" "$TOTAL" 1.299 + newline 1.300 + 1.301 + if [ -n "$mark" ]; then 1.302 + NUM="$(grep '^ *-' "$TMP_DIR/depends" | wc -l)" 1.303 + TOTAL="$(grep '^ *-' "$TMP_DIR/depends" | sed 's|.*(\([^)]*\))|\1|' | hrsum)" 1.304 + _p 'To install: %s package (%s)' 'To install: %s packages (%s)' "$NUM" \ 1.305 + "$NUM" "$TOTAL" 1.306 + newline 1.307 + fi 1.308 + fi 1.309 + rm -rf "$TMP_DIR" 1.310 + ;; 1.311 1.312 1.313 rdepends) 1.314 # Display reverse dependencies tree 1.315 cd $INSTALLED 1.316 - ALL_DEPS='' 1.317 - if [ -f "$2/receipt" ]; then 1.318 - rdep_scan $2 1.319 - fi 1.320 + unset ALL_DEPS 1.321 + rdep_scan "$2" 1.322 ;; 1.323 1.324