tazpkg annotate modules/depends @ 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.
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 |
rev | line source |
---|---|
al@840 | 1 #!/bin/sh |
al@840 | 2 # TazPkg - Tiny autonomous zone packages manager, hg.slitaz.org/tazpkg |
al@840 | 3 # depends - TazPkg module |
al@840 | 4 # Show packages dependencies and reverse dependencies trees |
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 # recursive dependencies scan |
al@840 | 17 |
al@840 | 18 dep_scan() { |
al@840 | 19 for i in $1; do |
al@840 | 20 case " $ALL_DEPS " in |
al@840 | 21 *\ $i\ *) continue;; |
al@840 | 22 esac |
al@840 | 23 ALL_DEPS="$ALL_DEPS $i" |
al@840 | 24 |
al@840 | 25 if [ -z "$mark" ]; then |
al@840 | 26 ii="$i" |
al@840 | 27 else |
al@840 | 28 ii="- $i"; grep -q ^$i$'\t' "$PKGS_DB/installed.info" && ii="+ $i" |
al@840 | 29 fi |
al@840 | 30 [ -n "$2" ] && echo "$2$ii ($(awk -F$'\t' -vp="$i" ' |
al@840 | 31 $1==p{split($7,s," ");print s[2]}' "$PKGS_DB/packages.info"))" |
al@840 | 32 |
al@840 | 33 DEPENDS="$(awk -F$'\t' -vp="$i" '$1==p{print $8 " "}' "$PKGS_DB/installed.info")" |
al@840 | 34 [ -z "$DEPENDS" ] && \ |
al@840 | 35 DEPENDS="$(awk -F$'\t' -vp="$i" '$1==p{print $8 " "}' "$PKGS_DB/packages.info")" |
al@840 | 36 [ -n "$DEPENDS" ] && dep_scan "$DEPENDS" "$2 " |
al@840 | 37 done |
al@840 | 38 } |
al@840 | 39 |
al@840 | 40 |
al@840 | 41 # recursive reverse dependencies scan |
al@840 | 42 |
al@840 | 43 rdep_scan() { |
al@840 | 44 SEARCH="$1" |
al@840 | 45 |
al@840 | 46 DB='installed'; [ -n "$all" ] && DB='packages' |
al@840 | 47 |
al@840 | 48 awk -F$'\t' '$8 {print $1 " " $8}' "$PKGS_DB/$DB.info" | \ |
al@846 | 49 awk -F' ' -v search="$SEARCH" ' |
al@840 | 50 function show_deps(pkg, space, i, n, mydeps) { |
al@840 | 51 if (processed[pkg]) return |
al@840 | 52 processed[pkg] = 1; |
al@840 | 53 |
al@840 | 54 if (space) printf "%s %s\n", space, pkg; |
al@840 | 55 |
al@840 | 56 n = split(deps[pkg], mydeps, " "); |
al@840 | 57 for (i = 1; i <= n; i++) |
al@840 | 58 show_deps(mydeps[i], "==" space); |
al@840 | 59 } |
al@840 | 60 |
al@840 | 61 { |
al@840 | 62 for (i = 2; i <= NF; i++) |
al@840 | 63 deps[$i] = deps[$i] " " $1; |
al@840 | 64 } |
al@840 | 65 |
al@840 | 66 END { |
al@840 | 67 show_deps(search, "") |
al@840 | 68 } |
al@840 | 69 ' | while read spc pkg; do |
al@840 | 70 if [ -z "$mark" ]; then |
al@840 | 71 pkgi="$pkg" |
al@840 | 72 else |
al@840 | 73 pkgi="- $pkg"; grep -q ^$pkg$'\t' "$PKGS_DB/installed.info" && pkgi="+ $pkg" |
al@840 | 74 fi |
al@840 | 75 |
al@840 | 76 echo -n $spc | sed 's/=/ /g' |
al@840 | 77 |
al@840 | 78 echo "$pkgi ($(awk -F$'\t' -vp="$pkg" '$1==p{split($7,s," ");print s[2]}' \ |
al@840 | 79 "$PKGS_DB/$DB.info"))" |
al@840 | 80 done |
al@840 | 81 } |
al@840 | 82 |
al@840 | 83 |
al@840 | 84 # Human readable sum |
al@840 | 85 |
al@840 | 86 hrsum() { |
al@840 | 87 awk ' |
al@840 | 88 BEGIN { |
al@840 | 89 K = 1024; M = K * 1024; G = M * 1024; |
al@840 | 90 SUM=0; |
al@840 | 91 } |
al@840 | 92 /K/ { SUM += $1 * K } |
al@840 | 93 /M/ { SUM += $1 * M } |
al@840 | 94 /G/ { SUM += $1 * G } |
al@840 | 95 END { |
al@840 | 96 if (SUM >= G) { |
al@840 | 97 SUM /= G; P = "GiB"; |
al@840 | 98 } else if (SUM >= M) { |
al@840 | 99 SUM /= M; P = "MiB"; |
al@840 | 100 } else { |
al@840 | 101 SUM /= K; P = "KiB"; |
al@840 | 102 } |
al@840 | 103 if (SUM >= 100) printf "%d%s", SUM, P; else printf "%.1f%s", SUM, P; |
al@840 | 104 }' | sed 's|\.0||' |
al@840 | 105 } |
al@840 | 106 |
al@840 | 107 |
al@840 | 108 |
al@840 | 109 |
al@840 | 110 case "$1" in |
al@840 | 111 |
al@840 | 112 depends) |
al@840 | 113 # Display dependencies tree |
al@840 | 114 unset ALL_DEPS |
al@840 | 115 TMP_DIR=$(mktemp -d) |
al@840 | 116 dep_scan "$2" '' | tee "$TMP_DIR/depends" |
al@840 | 117 if [ -n "$total" ]; then |
al@840 | 118 separator |
al@840 | 119 NUM="$(wc -l < "$TMP_DIR/depends")" |
al@840 | 120 TOTAL="$(sed 's|.*(\([^)]*\))|\1|' "$TMP_DIR/depends" | hrsum)" |
al@840 | 121 _p 'Total: %s package (%s)' 'Total: %s packages (%s)' "$NUM" \ |
al@840 | 122 "$NUM" "$TOTAL" |
al@840 | 123 newline |
al@840 | 124 |
al@840 | 125 if [ -n "$mark" ]; then |
al@840 | 126 NUM="$(grep '^ *-' "$TMP_DIR/depends" | wc -l)" |
al@840 | 127 TOTAL="$(grep '^ *-' "$TMP_DIR/depends" | sed 's|.*(\([^)]*\))|\1|' | hrsum)" |
al@840 | 128 _p 'To install: %s package (%s)' 'To install: %s packages (%s)' "$NUM" \ |
al@840 | 129 "$NUM" "$TOTAL" |
al@840 | 130 newline |
al@840 | 131 fi |
al@840 | 132 fi |
al@840 | 133 rm -rf "$TMP_DIR" |
al@840 | 134 ;; |
al@840 | 135 |
al@840 | 136 |
al@840 | 137 rdepends) |
al@840 | 138 # Display reverse dependencies tree |
al@840 | 139 cd $INSTALLED |
al@840 | 140 unset ALL_DEPS |
al@840 | 141 rdep_scan "$2" |
al@840 | 142 ;; |
al@840 | 143 |
al@840 | 144 esac |