[46914] contrib/port-rdeps/port-rdeps

raimue at macports.org raimue at macports.org
Mon Feb 16 20:44:36 PST 2009


Revision: 46914
          http://trac.macports.org/changeset/46914
Author:   raimue at macports.org
Date:     2009-02-16 20:44:34 -0800 (Mon, 16 Feb 2009)
Log Message:
-----------
port-rdeps:
Add new verbose flag -v which adds information about dependency types. The dot
graph now uses different edge styles and labels to represent dependency types.

Modified Paths:
--------------
    contrib/port-rdeps/port-rdeps

Modified: contrib/port-rdeps/port-rdeps
===================================================================
--- contrib/port-rdeps/port-rdeps	2009-02-17 02:51:58 UTC (rev 46913)
+++ contrib/port-rdeps/port-rdeps	2009-02-17 04:44:34 UTC (rev 46914)
@@ -20,16 +20,22 @@
 
 
 proc printUsage {} {
-   puts "Usage: $::argv0 \[-dhrV\] \[-t macports-tcl-path\] port-name \[variants...\]"
+   puts "Usage: $::argv0 \[-dhrvV\] \[-t macports-tcl-path\] port-name \[variants...\]"
    puts "   -d   Output dot-format instead of plain ASCII"
    puts "   -h   This help"
    puts "   -r   Reduce ASCII output, showing a given port only once"
    puts "   -t   Give a different location for the base MacPorts Tcl"
    puts "        file (defaults to /Library/Tcl)"
+   puts "   -v   verbose output, includes dependency labels"
    puts "   -V   show version and MacPorts version being used"
    puts ""
    puts "port-name is the name of a port to show dependencies"
    puts "variants is the list of variants to enable/disable: +one -two..."
+   puts ""
+   puts "For dot output, dependency types are represented as follows:"
+   puts "   depends_run   is dashed"
+   puts "   depends_build is dotted"
+   puts "   depends_lib   is solid"
 }
 
 
@@ -50,7 +56,7 @@
       if {[info exists portInfo($dependencyType)] && [string length $portInfo($dependencyType)] > 0} {
          foreach dependency $portInfo($dependencyType) {
             set afterColon [expr {[string last ":" $dependency] + 1}]
-            lappend dependencyList "[string range $dependency $afterColon end]"
+            lappend dependencyList [list $dependencyDictionary($dependencyType) [string range $dependency 0 [expr [string first ":" $dependency] - 1]] [string range $dependency $afterColon end]]
          }
       }
    }
@@ -59,30 +65,47 @@
 }
 
 
-proc print_dependencies {dependencyArray portName outputAscii reduceAscii} {
+proc print_dependencies {dependencyArray portName outputAscii reduceAscii verbose} {
    upvar $dependencyArray portDependencies
    global portsSeen
    if {$outputAscii} {
       set spaces [string repeat " " [expr {$outputAscii * 2}]]
       set outputAscii [expr {$outputAscii + 1}]
    }
-   foreach aPort $portDependencies($portName) {
+   foreach aList $portDependencies($portName) {
+      set aType [lindex $aList 0]
+      set aBy   [lindex $aList 1]
+      set aPort [lindex $aList 2]
+
       if {$outputAscii && $reduceAscii && [lsearch -exact $portsSeen $aPort] != -1} {
          continue
       } else {
          lappend portsSeen $aPort
       }
-      if {$outputAscii} {
+
+      set style "solid"
+      if {$aType == "run"} {
+         set style "dashed"
+      } elseif {$aType == "build"} {
+         set style "dotted"
+      }
+
+      if {$outputAscii && !$verbose} {
          puts "${spaces}${aPort}"
-      } else {
-         puts "\"$portName\" -> \"$aPort\""
+      } elseif {$outputAscii && $verbose} {
+         puts "${spaces}${aPort} (depends_${aType}, ${aBy})"
+      } elseif {!$outputAscii && !$verbose} {
+         puts [format {"%s" -> "%s" [ style=%s ] } $portName $aPort $style]
+      } elseif {!$outputAscii && $verbose} {
+         puts [format {"%s" -> "%s" [ label="%s",style=%s ]} $portName $aPort $aBy $style]
       }
-      print_dependencies portDependencies $aPort $outputAscii $reduceAscii
+
+      print_dependencies portDependencies $aPort $outputAscii $reduceAscii $verbose
    }
 }
 
 
-proc find_all_dependencies {portName variantInfo outputAscii reduceAscii} {
+proc find_all_dependencies {portName variantInfo outputAscii reduceAscii verbose} {
    array set portDependencies {}
    set portList [list $portName]
    while {[llength $portList] > 0} {
@@ -90,8 +113,8 @@
       set portDependencies($aPort) [dependenciesForPort $aPort $variantInfo]
       set portList [lreplace $portList 0 0]
       foreach possiblyNewPort $portDependencies($aPort) {
-         if {![info exists portDependencies($possiblyNewPort)]} {
-            lappend portList $possiblyNewPort
+         if {![info exists portDependencies([lindex $possiblyNewPort 2])]} {
+            lappend portList [lindex $possiblyNewPort 2]
          }
       }
    }
@@ -102,7 +125,7 @@
       puts "strict digraph \"$portName\" \{"
    }
 
-   print_dependencies portDependencies $portName $outputAscii $reduceAscii
+   print_dependencies portDependencies $portName $outputAscii $reduceAscii $verbose
 
    if {!$outputAscii} {
       puts "\}"
@@ -115,6 +138,7 @@
 set asciiOutput 1
 set reduceAsciiOutput 0
 set macportsTclPath /Library/Tcl
+set verbose 0
 set showVersion 0
 
 while {[string index [lindex $::argv 0] 0] == "-" } {
@@ -138,6 +162,9 @@
          set macportsTclPath [lindex $::argv 1]
          set ::argv [lrange $::argv 1 end]
       }
+      v {
+          set verbose 1
+      }
       V {
          set showVersion 1
       }
@@ -175,5 +202,5 @@
    set variantInfo($variantName) $flag
 }
 
-find_all_dependencies $portName [array get variantInfo] $asciiOutput $reduceAsciiOutput
+find_all_dependencies $portName [array get variantInfo] $asciiOutput $reduceAsciiOutput $verbose
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20090216/429204e4/attachment.html>


More information about the macports-changes mailing list