From c8fb2604da8edcd5ad670cd41bda49843016a89c Mon Sep 17 00:00:00 2001 From: Steven Penny Date: Wed, 28 May 2014 23:26:51 -0500 Subject: [PATCH] Improve "depends" function - function will now print the packages at proper depths - added newline between each result if called with multiple packages --- apt-cyg | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/apt-cyg b/apt-cyg index fa97623..815c2c7 100755 --- a/apt-cyg +++ b/apt-cyg @@ -185,25 +185,44 @@ apt-depends () { checkpackages for pkg in $packages do + (( sq++ )) && echo awk ' $1 == "@" { pkg = $2 } $1 == "requires:" { for (i=2; i<=NF; i++) - reqs[pkg][$i] + reqs[pkg][i-1]=$i } END { + setMinDepth(query) prtPkg(query) } - function prtPkg(pkg) { - if (seen[pkg]++) return - printf "%*s%s\n", indent, "", pkg - indent++ - if (pkg in reqs) - for (req in reqs[pkg]) - prtPkg(req) - indent-- + function prtPkg(pkg, req, i) { + depth++ + if ( depth == mn[pkg] && !seen[pkg]++ ) { + printf "%*s%s\n", indent, "", pkg + indent += 2 + if (pkg in reqs) + for (i=1; i in reqs[pkg]; i++) { + req = reqs[pkg][i] + prtPkg(req) + } + indent -= 2 + } + depth-- + } + function setMinDepth(pkg, req, i) { + depth++ + mn[pkg] = !(pkg in mn) || depth < mn[pkg] ? depth : mn[pkg] + if (depth == mn[pkg]) { + if (pkg in reqs) + for (i=1; i in reqs[pkg]; i++) { + req = reqs[pkg][i] + setMinDepth(req) + } + } + depth-- } ' query="$pkg" setup.ini done