pt-deptree 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #!/bin/sh
  2. # Pacman Dependency Tree
  3. # does NOT handle group names -> unexpected results.
  4. # Package names using aliases, like x-server, should work.
  5. # Breaks on circular dependencies -> you better hit ctrl-c.
  6. export LC_ALL=en_US
  7. progname=`basename $0`
  8. pacexec='pacman'
  9. leafnull='None'
  10. branch=""
  11. vbranch="| "
  12. vprune=" "
  13. hbranch="+---"
  14. _showdep () {
  15. # Try to use specific pkg req
  16. if $pacexec -Qi $1 &> /dev/null ; then
  17. # Grab deps list|from "Depends"|Remove Tag \| specific version req's.
  18. deplist=`$pacexec -Qi $1|grep Depends|sed 's/^.*: \|>[^ ]*//g;s/ $//'`
  19. else # Oops! Failed on alias, try this...
  20. deplist=`$pacexec -Qs $1 | sed '1!d;s/\(^.*\/\)\(.*\)\( .*$\)/\2/'`
  21. fi
  22. [ "x$deplist" = "x$leafnull" ] && return
  23. while [ -n "$deplist" ]
  24. do
  25. set -- $deplist && echo "$branch$hbranch$1"
  26. if [ $# -gt 1 ] ; then
  27. branch=${branch}$vbranch
  28. else
  29. branch=${branch}$vprune
  30. fi
  31. _showdep $1
  32. deplist=${*:2}
  33. branch=${branch:0:${#branch}-${#vprune}}
  34. done
  35. }
  36. branch=$vprune
  37. for pkg in `$pacexec -Q $1 | sed 's/ .*//'`
  38. do
  39. echo $pkg
  40. _showdep $pkg
  41. done
  42. unset _showdep && set --
  43. exit 0