[pacman-dev] pactree reverse dependancies

Christophe Chapuis chris.chapuis at gmail.com
Thu Apr 15 14:13:11 EDT 2010


On Wed, Apr 14, 2010 at 12:59 PM, Christophe Chapuis <
chris.chapuis at gmail.com> wrote:

>
>
> On Wed, Apr 14, 2010 at 12:28 PM, Allan McRae <allan at archlinux.org> wrote:
>
>> On 14/04/10 19:23, Christophe Chapuis wrote:
>>
>>> Here it comes (output of a simple diff command):
>>>
>>
>> Any chance of a git patch, or at least a unified diff?
>>
>> Allan
>>
>> Sure, but you'll have to wait some hours, I'm not at home right now.
>

Sorry for the delay, here is a unified diff:

------------------------snip-------------------

--- /usr/bin/pactree    2009-11-20 06:12:20.000000000 +0100
+++ pactree    2010-04-11 17:44:41.000000000 +0200
@@ -41,7 +41,7 @@
 arrow2_color="grey"           #color of the "provided by" headless arrow

 readonly prog_name="pactree"
-readonly prog_ver="0.2"
+readonly prog_ver="0.2.1"

 _usage(){
     echo "This program generates the dependency tree of an installed
package"
@@ -54,11 +54,12 @@
     echo "  -l, --linear               Enable linear output"
     echo "  -s, --silent               Shh, let me hear those errors!"
     echo "  -u, --unique               Print the dependency list with no
duplicates"
+  echo "  -r, --reversed              Show reversed dependancies"
     echo
     echo "  -h, --help                 Print this help message"
     echo "  -v, --version              Print the program name and version"
     echo
-    echo "Example: $prog_name -c -d 2 readline"
+    echo "Example: $prog_name -c -d2 readline"
 }

 _version(){
@@ -140,7 +141,16 @@

         if [[ ! " ${dep_list[@]} " =~ " $pkg_name " ]] && [ $spaces -ne
$max_depth ]; then
             dep_list=( "${dep_list[@]}" "$pkg_name" )
-            for dep_pkg in $(_grabfield "$pkg_dir/depends" %DEPENDS%); do
+      if [ $reversed_dep -eq 1 ]; then
+         reqs_pkg_dir="$(_finddep "$pkg_name" %DEPENDS% depends)"
+         unset deps_pkg
+         for req_pkg_dir in $reqs_pkg_dir; do
+           deps_pkg=$(echo "$deps_pkg" "$(_grabfield "$req_pkg_dir/desc"
%NAME%)")
+         done
+      else
+         deps_pkg="$(_grabfield "$pkg_dir/depends" %DEPENDS%)"
+      fi
+            for dep_pkg in $deps_pkg; do
                 spaces=$2        #Bash scoping ;_;
                 if [ $graphviz -eq 1 ]; then
                     echo "\"$1\" -> \"${dep_pkg%%[<>=]*}\"
[color=$arrow1_color];"
@@ -208,6 +218,12 @@
         continue
     fi

+  if [ "${options[$n]}" = "-r" -o "${options[$n]}" = "--reversed" ]; then
+    unset options[$n]
+    reversed_dep=1
+    continue
+  fi
+
     if [[ "${options[$n]}" =~ -d[[:digit:]]+ || "${options[$n]}" ==
"--depth" ]]; then
         if [[ "${options[$n]#-d}" =~ [[:digit:]]+ ]]; then
             max_depth="${options[$n]#-d}"
@@ -229,6 +245,7 @@
 silent=${silent:-0}
 nodup=${nodup:-0}
 graphviz=${graphviz:-0}
+reversed_dep=${reversed_dep:-0}

 if [ $colored -ne 1 ]; then
     unset branch1_color
@@ -293,7 +310,13 @@
     # Uncomment for the "generated by pactree" node in graphviz
     #advert="xyz [height=0.07, fontsize=8.0, label=\"GENERATED WITH
PACTREE\",shape=box,color="black",style=filled,fontcolor="white"];\n"

-    echo -e "digraph G { START [color=$start_color, style=filled];\n node
[style=filled, color=$nodes_color];\n$(_main)\n$advert}" | dot -T$gformat -o
"${root_pkgs// /_}.deps.$gformat"
+  if [ $reversed_dep -eq 1 ]; then
+     file_extension="reqs.$gformat"
+  else
+     file_extension="deps.$gformat"
+  fi
+
+    echo -e "digraph G { START [color=$start_color, style=filled];\n node
[style=filled, color=$nodes_color];\n$(_main)\n$advert}" | dot -T$gformat -o
"${root_pkgs// /_}.$file_extension"
 else _main
 fi


More information about the pacman-dev mailing list