summaryrefslogtreecommitdiff
path: root/pcr/pactools/pt-deptree
diff options
context:
space:
mode:
Diffstat (limited to 'pcr/pactools/pt-deptree')
-rwxr-xr-xpcr/pactools/pt-deptree54
1 files changed, 54 insertions, 0 deletions
diff --git a/pcr/pactools/pt-deptree b/pcr/pactools/pt-deptree
new file mode 100755
index 000000000..edb6f538b
--- /dev/null
+++ b/pcr/pactools/pt-deptree
@@ -0,0 +1,54 @@
+#!/bin/sh
+# Pacman Dependency Tree
+# does NOT handle group names -> unexpected results.
+# Package names using aliases, like x-server, should work.
+# Breaks on circular dependencies -> you better hit ctrl-c.
+
+export LC_ALL=en_US
+
+progname=`basename $0`
+pacexec='pacman'
+leafnull='None'
+branch=""
+vbranch="| "
+vprune=" "
+hbranch="+---"
+
+_showdep () {
+
+ # Try to use specific pkg req
+ if $pacexec -Qi $1 &> /dev/null ; then
+ # Grab deps list|from "Depends"|Remove Tag \| specific version req's.
+ deplist=`$pacexec -Qi $1|grep Depends|sed 's/^.*: \|>[^ ]*//g;s/ $//'`
+ else # Oops! Failed on alias, try this...
+ deplist=`$pacexec -Qs $1 | sed '1!d;s/\(^.*\/\)\(.*\)\( .*$\)/\2/'`
+ fi
+
+ [ "x$deplist" = "x$leafnull" ] && return
+
+ while [ -n "$deplist" ]
+ do
+ set -- $deplist && echo "$branch$hbranch$1"
+ if [ $# -gt 1 ] ; then
+ branch=${branch}$vbranch
+ else
+ branch=${branch}$vprune
+ fi
+
+ _showdep $1
+
+ deplist=${*:2}
+ branch=${branch:0:${#branch}-${#vprune}}
+ done
+}
+
+branch=$vprune
+
+for pkg in `$pacexec -Q $1 | sed 's/ .*//'`
+do
+ echo $pkg
+ _showdep $pkg
+done
+
+unset _showdep && set --
+exit 0