Instantly share code, notes, and snippets.

Embed
What would you like to do?
debian dependency tree
#! /bin/bash
# Description: show dependency tree
# Author: damphat
if [ $# != 1 ]; then
echo 'Usage: apt-rdepends-tree <package>'
echo 'Required packages: apt-rdepends'
exit 1
fi
# tree template
T1=" ├─"
T2=" │ ├─"
T3=" │ └─"
# tree template for last node
T4=" └─"
T5=" ├─"
T6=" └─"
# mark '1' for parent node, '2' for child node
TEXT="$(apt-rdepends $1 | sed -e 's/^/1 /' -e 's/.*: /2 /'; echo '-')"
TOTAL=$(echo "$TEXT" | grep '^1' | wc -l) # total parent
COUNT=0
echo "$TEXT" | while read line; do
tmp=$last
[ "${line:0:1}" != "${last:0:1}" ] && tmp=$(echo $last | sed -e 's/^2/3/')
[ "${tmp:0:1}" == "1" ] && ((COUNT++))
if [ "$TOTAL" != "$COUNT" ]; then
echo $tmp | sed -e "s/^1/$T1/" -e "s/^2/$T2/" -e "s/^3/$T3/"
else
echo $tmp | sed -e "s/^1/$T4/" -e "s/^2/$T5/" -e "s/^3/$T6/"
fi
last=$line
done
@willemw12

This comment has been minimized.

Copy link

willemw12 commented Jul 31, 2014

If you allow for more apt-rdepends options (for example, ' apt-rdepends "$@" '), then you can also, for example, display a reverse dependency tree (' apt-rdepends-tree -r ').

@sr105

This comment has been minimized.

Copy link

sr105 commented Dec 17, 2014

@vitiral

This comment has been minimized.

Copy link

vitiral commented Mar 17, 2015

this is fantastic! Exactly what I was looking for, thanks a ton :D

@acx2015

This comment has been minimized.

Copy link

acx2015 commented Dec 4, 2015

+1 very nice! Thanks for writing this and posting on SO!

@dmak

This comment has been minimized.

Copy link

dmak commented Sep 5, 2018

Would be nice to have an option to suppress (filter out) dependencies which are already listed above, e.g.

    ├─ libexpat1
    │    └─ libc6 (>= 2.4)
    └─ libpcre2-8-0
         └─ libc6 (>= 2.4)

turns into:

    ├─ libexpat1
    │    └─ libc6 (>= 2.4)
    └─ libpcre2-8-0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment