tazpkg annotate modules/depends @ rev 963
modules/install: prefex "exact" packages over than "provided" packages.
In other words when requested "linux-agp": prefer "linux-agp" (if it exists) over the "linux-libre-agp".
In other words when requested "linux-agp": prefer "linux-agp" (if it exists) over the "linux-libre-agp".
author | Aleksej Bobylev <al.bobylev@gmail.com> |
---|---|
date | Mon Feb 26 00:54:19 2018 +0200 (2018-02-26) |
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 |