Now, with colored nodes, colored dependencies, and options handling :
#!/bin/sh
PROGNAME=$(basename $0)
NODE_COLOR=0
DEP_COLOR=0
TOP_COL=greenyellow
BOTTOM_COL=firebrick
DEP_COL=lightgrey
TOP_PKGS=""
get_fulldepends() {
FULLDEP=
STEP=$(pkg_info -f $1 | grep '@depend' | cut -d':' -f3 | tr '\n' ' ')
until [ -z "$STEP" ] ; do
DEP=$(echo $STEP | cut -d' ' -f1)
echo $FULLDEP | grep $DEP > /dev/null
if [ $? -ne 0 ] ; then
FULLDEP="$FULLDEP $DEP"
STEP="$STEP $(pkg_info -f $DEP | grep
'@depend' | cut -d':' -f3 | tr '\n' ' ')"
fi
STEP=$(echo $STEP | cut -s -d' ' -f2- | tr -d '\n')
done
echo $FULLDEP
}
ARGS=$(getopt nDb:d:t: $*)
if [ $? -ne 0 ] ; then
echo "$PROGNAME [-nD] [-b color] [-d color] [-t color]"
exit 2
fi
set -- $ARGS
for i
do
case "$i"
in
-n)
NODE_COLOR=1
shift;;
-D)
DEP_COLOR=1
shift;;
-b)
NODE_COLOR=1
BOTTOM_CO=$2; shift; shift;;
-d)
DEP_COLOR=1
DEP_COL=$2 ; shit; shift;;
-t)
NODE_COLOR=1
TOP_COL=$2; shift; shift;;
--)
shift; break;;
esac
done
echo "digraph pkg_dep"
echo "{"
for PKG in $(pkg_info | cut -d' ' -f1) ; do
PKG_INFO=$(pkg_info -c $PKG | tail -n+4 | tr -s '\n')
echo "\t\"$PKG\" [label=\"$PKG\\\n$PKG_INFO\"];"
REQ_BY=""
for REQ_BY in $(pkg_info -R $PKG | tail -n+4 | tr -s '\n') ; do
echo "\t\"$REQ_BY\" -> \"$PKG\";"
done
if [ -z "$REQ_BY" ] ; then
TOP_PKGS="$TOP_PKGS $PKG"
fi
if [ $NODE_COLOR -eq 1 ] ; then
REQ=$(pkg_info -f $PKG | grep '@depend' | cut -d':' -f3)
if [ -z "$REQ_BY" ] ; then
echo "\t\"$PKG\" [color=\"$TOP_COL\",
style=\"filled\"];"
elif [ -z "$REQ" ] ; then
echo "\t\"$PKG\" [color=\"$BOTTOM_COL\",
style=\"filled\"];"
fi
fi
done
if [ $DEP_COLOR -eq 1 ] ; then
for PKG in $TOP_PKGS ; do
echo
echo "\tsubgraph \"cluster_$PKG\""
echo "\t{"
echo "\t\tstyle=filled;"
echo "\t\tcolor=$DEP_COL;"
echo "\t\tlabel=\"all-$PKG\";"
echo "\t\t\"$PKG\";"
for P in $(get_fulldepends $PKG) ; do
echo "\t\t\"$P\";"
done
echo "\t}"
done
fi
echo "}"
exit 0
2006/10/8, Bruno Carnazzi <[EMAIL PROTECTED]>:
Now, with colors :
[SNIP]
2006/10/8, Bruno Carnazzi <[EMAIL PROTECTED]>:
> First blood :
>
> [SNIP]
>
> But for my big packages set, it does not produce a beautiful graph.
> Someone know how to beautify it ?
>
> Thank you,
>
> Bruno.
>
> Attached, my generated dot file (gosh ! gdm is really a pig !) :
>
[SNIP]
>
> 2006/10/7, Matthias Kilian <[EMAIL PROTECTED]>:
> > On Sat, Oct 07, 2006 at 10:32:21PM +0400, Bruno Carnazzi wrote:
> > > Someone knows if this kind of stuff already exists ?
> >
> > I just found this one (old, untested, and after all *not* supported,
> > since it seems to directly access /var/db/pkg):
> >
> > http://vgai.de/gpkgview.sh
> >
> > Ciao,
> > Kili