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.

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.

sr105 commented Dec 17, 2014

@vitiral

This comment has been minimized.

vitiral commented Mar 17, 2015

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

@acx2015

This comment has been minimized.

acx2015 commented Dec 4, 2015

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

@dmak

This comment has been minimized.

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