summaryrefslogtreecommitdiff
path: root/pcr/pactools/pt-deptree
blob: edb6f538bec5c888b57261969f34f62539b3e337 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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