Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Add script for viewing installed/remote packages in a tree
Bryan Drewery committed 13 years ago
commit df4fa48d3a465f58eb842ec6e9acdefb33325666
parent ab0ba7d
1 file changed +131 -0
added scripts/pkg_tree.sh
@@ -0,0 +1,131 @@
+
#! /bin/sh
+
# Copyright (c) 2012 Bryan Drewery <bryan@shatow.net>
+
# All rights reserved.
+
# 
+
# Redistribution and use in source and binary forms, with or without
+
# modification, are permitted provided that the following conditions
+
# are met:
+
# 1. Redistributions of source code must retain the above copyright
+
#    notice, this list of conditions and the following disclaimer
+
#    in this position and unchanged.
+
# 2. Redistributions in binary form must reproduce the above copyright
+
#    notice, this list of conditions and the following disclaimer in the
+
#    documentation and/or other materials provided with the distribution.
+
# 
+
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
+
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+
# IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
+
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+

+
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 "-p: Print package names"
+
	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 "hnprRU" opt; do
+
	case "${opt}" in
+
		n)
+
			TREE_VIEW=0
+
			;;
+
		p)
+
			DISPLAY_PKG=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_PKG:=0}
+

+
if [ $REVERSE_DEPENDS -eq 0 ]; then
+
	PKG_QUERY_DEPENDS="d"
+
else
+
	PKG_QUERY_DEPENDS="r"
+
fi
+

+
if [ $DISPLAY_PKG -eq 1 ]; 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