tazpkg diff modules/depends @ rev 840
Add a bunch of modules with new-style support of 'root' (not all commands are modules yet); strip and compress resources.
author | Aleksej Bobylev <al.bobylev@gmail.com> |
---|---|
date | Fri Aug 28 16:10:34 2015 +0300 (2015-08-28) |
parents | |
children | 8a73a58ed3cb |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/modules/depends Fri Aug 28 16:10:34 2015 +0300 1.3 @@ -0,0 +1,144 @@ 1.4 +#!/bin/sh 1.5 +# TazPkg - Tiny autonomous zone packages manager, hg.slitaz.org/tazpkg 1.6 +# depends - TazPkg module 1.7 +# Show packages dependencies and reverse dependencies trees 1.8 + 1.9 + 1.10 +# Connect function libraries 1.11 +. /lib/libtaz.sh 1.12 + 1.13 +# Get TazPkg working environment 1.14 +. @@MODULES@@/getenv 1.15 + 1.16 + 1.17 + 1.18 + 1.19 +# recursive dependencies scan 1.20 + 1.21 +dep_scan() { 1.22 + for i in $1; do 1.23 + case " $ALL_DEPS " in 1.24 + *\ $i\ *) continue;; 1.25 + esac 1.26 + ALL_DEPS="$ALL_DEPS $i" 1.27 + 1.28 + if [ -z "$mark" ]; then 1.29 + ii="$i" 1.30 + else 1.31 + ii="- $i"; grep -q ^$i$'\t' "$PKGS_DB/installed.info" && ii="+ $i" 1.32 + fi 1.33 + [ -n "$2" ] && echo "$2$ii ($(awk -F$'\t' -vp="$i" ' 1.34 + $1==p{split($7,s," ");print s[2]}' "$PKGS_DB/packages.info"))" 1.35 + 1.36 + DEPENDS="$(awk -F$'\t' -vp="$i" '$1==p{print $8 " "}' "$PKGS_DB/installed.info")" 1.37 + [ -z "$DEPENDS" ] && \ 1.38 + DEPENDS="$(awk -F$'\t' -vp="$i" '$1==p{print $8 " "}' "$PKGS_DB/packages.info")" 1.39 + [ -n "$DEPENDS" ] && dep_scan "$DEPENDS" "$2 " 1.40 + done 1.41 +} 1.42 + 1.43 + 1.44 +# recursive reverse dependencies scan 1.45 + 1.46 +rdep_scan() { 1.47 + SEARCH="$1" 1.48 + 1.49 + DB='installed'; [ -n "$all" ] && DB='packages' 1.50 + 1.51 + awk -F$'\t' '$8 {print $1 " " $8}' "$PKGS_DB/$DB.info" | \ 1.52 + busybox awk -F' ' -v search="$SEARCH" ' 1.53 +function show_deps(pkg, space, i, n, mydeps) { 1.54 + if (processed[pkg]) return 1.55 + processed[pkg] = 1; 1.56 + 1.57 + if (space) printf "%s %s\n", space, pkg; 1.58 + 1.59 + n = split(deps[pkg], mydeps, " "); 1.60 + for (i = 1; i <= n; i++) 1.61 + show_deps(mydeps[i], "==" space); 1.62 +} 1.63 + 1.64 +{ 1.65 + for (i = 2; i <= NF; i++) 1.66 + deps[$i] = deps[$i] " " $1; 1.67 +} 1.68 + 1.69 +END { 1.70 + show_deps(search, "") 1.71 +} 1.72 +' | while read spc pkg; do 1.73 + if [ -z "$mark" ]; then 1.74 + pkgi="$pkg" 1.75 + else 1.76 + pkgi="- $pkg"; grep -q ^$pkg$'\t' "$PKGS_DB/installed.info" && pkgi="+ $pkg" 1.77 + fi 1.78 + 1.79 + echo -n $spc | sed 's/=/ /g' 1.80 + 1.81 + echo "$pkgi ($(awk -F$'\t' -vp="$pkg" '$1==p{split($7,s," ");print s[2]}' \ 1.82 + "$PKGS_DB/$DB.info"))" 1.83 + done 1.84 +} 1.85 + 1.86 + 1.87 +# Human readable sum 1.88 + 1.89 +hrsum() { 1.90 + awk ' 1.91 + BEGIN { 1.92 + K = 1024; M = K * 1024; G = M * 1024; 1.93 + SUM=0; 1.94 + } 1.95 + /K/ { SUM += $1 * K } 1.96 + /M/ { SUM += $1 * M } 1.97 + /G/ { SUM += $1 * G } 1.98 + END { 1.99 + if (SUM >= G) { 1.100 + SUM /= G; P = "GiB"; 1.101 + } else if (SUM >= M) { 1.102 + SUM /= M; P = "MiB"; 1.103 + } else { 1.104 + SUM /= K; P = "KiB"; 1.105 + } 1.106 + if (SUM >= 100) printf "%d%s", SUM, P; else printf "%.1f%s", SUM, P; 1.107 + }' | sed 's|\.0||' 1.108 +} 1.109 + 1.110 + 1.111 + 1.112 + 1.113 +case "$1" in 1.114 + 1.115 + depends) 1.116 + # Display dependencies tree 1.117 + unset ALL_DEPS 1.118 + TMP_DIR=$(mktemp -d) 1.119 + dep_scan "$2" '' | tee "$TMP_DIR/depends" 1.120 + if [ -n "$total" ]; then 1.121 + separator 1.122 + NUM="$(wc -l < "$TMP_DIR/depends")" 1.123 + TOTAL="$(sed 's|.*(\([^)]*\))|\1|' "$TMP_DIR/depends" | hrsum)" 1.124 + _p 'Total: %s package (%s)' 'Total: %s packages (%s)' "$NUM" \ 1.125 + "$NUM" "$TOTAL" 1.126 + newline 1.127 + 1.128 + if [ -n "$mark" ]; then 1.129 + NUM="$(grep '^ *-' "$TMP_DIR/depends" | wc -l)" 1.130 + TOTAL="$(grep '^ *-' "$TMP_DIR/depends" | sed 's|.*(\([^)]*\))|\1|' | hrsum)" 1.131 + _p 'To install: %s package (%s)' 'To install: %s packages (%s)' "$NUM" \ 1.132 + "$NUM" "$TOTAL" 1.133 + newline 1.134 + fi 1.135 + fi 1.136 + rm -rf "$TMP_DIR" 1.137 + ;; 1.138 + 1.139 + 1.140 + rdepends) 1.141 + # Display reverse dependencies tree 1.142 + cd $INSTALLED 1.143 + unset ALL_DEPS 1.144 + rdep_scan "$2" 1.145 + ;; 1.146 + 1.147 +esac