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