#! /bin/sh
show_tree() {
local name=$1
local indentation=$2
local parent=$3
if [ $RECURSIVE -eq 0 -a $indentation -gt 1 ]; then
return
fi
if [ $indentation -eq 0 ]; then
parent="${name}"
else
parent="${parent}% ${name}"
fi
echo ${parent}
for depends in $(pkg ${PKG_QUERY} ${PKG_QUERY_DISPLAY_DEPENDS} ${name} | sort); do
test -z "${depends}" && return
show_tree $depends $((${indentation} + 1)) ${parent}
done
}
usage() {
echo "Usage: $0 [-nprR] [pkgname|origin] [...]"
echo "-n: Non-tree view, uses tabs instead"
echo "-o: Print package origin"
echo "-r: Recursively show required packages"
echo "-R: Use remote repository"
echo "-U: Show reverse depends"
echo "If no package/origin is specified, show all non-automatic packages at top-level."
exit 0
}
while getopts "hnorRU" opt; do
case "${opt}" in
n)
TREE_VIEW=0
;;
o)
DISPLAY_ORIGIN=1
;;
r)
RECURSIVE=1
;;
R)
USE_RQUERY=1
;;
U)
REVERSE_DEPENDS=1
;;
*)
usage
;;
esac
done
shift $(($OPTIND - 1))
: ${RECURSIVE:=0}
: ${REVERSE_DEPENDS:=0}
: ${TREE_VIEW:=1}
: ${USE_RQUERY:=0}
: ${DISPLAY_ORIGIN:=0}
if [ $REVERSE_DEPENDS -eq 0 ]; then
PKG_QUERY_DEPENDS="d"
else
PKG_QUERY_DEPENDS="r"
fi
if [ $DISPLAY_ORIGIN -eq 0 ]; then
PKG_QUERY_DISPLAY="%n-%v"
PKG_QUERY_DISPLAY_DEPENDS="%${PKG_QUERY_DEPENDS}n-%${PKG_QUERY_DEPENDS}v"
else
PKG_QUERY_DISPLAY="%o"
PKG_QUERY_DISPLAY_DEPENDS="%${PKG_QUERY_DEPENDS}o"
fi
if [ $USE_RQUERY -eq 0 ]; then
PKG_QUERY=query
else
PKG_QUERY=rquery
fi
main() {
if [ $# -eq 0 ]; then
if [ $USE_RQUERY -eq 0 ]; then
packages=$(pkg ${PKG_QUERY} -e '%a = 0' ${PKG_QUERY_DISPLAY} | sort)
else
packages=$(pkg ${PKG_QUERY} ${PKG_QUERY_DISPLAY} | sort)
fi
else
packages=$@
fi;
for name in ${packages}; do
show_tree ${name} 0
done
}
if [ $TREE_VIEW -eq 1 ]; then
main $@ | sed -e 's/[^%]*%/| /g' -e 's/| \([^|]\)/`--\1/g'
else
main $@ | sed -e 's/[^%]*%/ /g'
fi