Benutzer-Werkzeuge

Webseiten-Werkzeuge


scytheman:zeugs:scripte:depend_graph.sh

↑ zurück

depend_graph.sh

Beschreibung

Das Script depend_graph.sh erzeugt mittels dot (graphviz) einen Abhängigkeitsgraphen eines Debian-Pakets. Abhängigkeiten werden in roten Kreisen dargestellt, Empfehlungen und Vorschläge des übergebenen Pakets in grünen bzw. blauen Rechtecken (ähnlich zu http://packages.debian.org).

Benötigt

Code

#!/bin/sh
 
# we need a temp file to store already calculated dependencies
# otherwhise there is a risk of infinite recursion
TMP="/tmp/depend_graph"
rm -f $TMP  
 
# location of graph (image and dot file)
GRAPH="/tmp"   
 
 
# graphviz code
echo "digraph depend {" > $GRAPH/depend_graph.dot
# add default node style (similar to packages.debian.org)
echo "    node [shape=ellipse, color=black, fillcolor=firebrick1, style=filled];" >> $GRAPH/depend_graph.dot
 
# function for calculating dependency
depends()
{
 for dependency in $(apt-cache depends $1 | grep "Depends:" | cut -d ":" -f2)
 do
        # add dependency to dot file
        echo "    \"$1\" -> \"$dependency\";" >> $GRAPH/depend_graph.dot
 
        # have we already calculated the current dependency?
        if ! grep -q "^$dependency$" $TMP
        then
                echo $dependency >> $TMP
                # recursive call function depends()
                depends $dependency
        fi
 done
}
 
# function for calculating recommended and suggested package
rec_sug()
{
 apt-cache depends $1 | while read line
 do
        if $(echo $line | grep -q "Recommends:")
        then
                dependency=$(echo $line | cut -d ":" -f2 | tr -d ' ')
                # set node style (similar to packages.debian.org) and add recommended package to dot file
                echo "    \"$dependency\" [shape=diamond, color=black, fillcolor=green, style=filled];" >> $GRAPH/depend_graph.dot
                echo "    \"$1\" -> \"$dependency\";" >> $GRAPH/depend_graph.dot                                                  
        elif $(echo $line | grep -q "Suggests:")
        then
                dependency=$(echo $line | cut -d ":" -f2 | tr -d ' ')
                echo "    \"$dependency\" [shape=box, color=black, fillcolor=dodgerblue, style=filled];" >> $GRAPH/depend_graph.dot
                echo "    \"$1\" -> \"$dependency\";" >> $GRAPH/depend_graph.dot
        fi
 done
}
 
 
# call functions with first parameter (= packet name)
depends $1
 
rec_sug $1
 
# add final bracket
echo "}" >> $GRAPH/depend_graph.dot 
 
# run dot (graphviz) do draw the graph
dot $GRAPH/depend_graph.dot -Tpng -o $GRAPH/depend_graph.png

Beispiele

Joe:
:scytheman:zeugs:scripte:depend_graph_joe.png

defoma (28KB):
:scytheman:zeugs:scripte:depend_graph_defoma_thb.png

kdebase (1.2MB):
:scytheman:zeugs:scripte:depend_graph_kdebase_thb.png

scytheman/zeugs/scripte/depend_graph.sh.txt · Zuletzt geändert: 2014/03/01 17:13 (Externe Bearbeitung)