[65858] trunk/base/src/port/port.tcl

jmr at macports.org jmr at macports.org
Thu Apr 1 23:47:56 PDT 2010


Revision: 65858
          http://trac.macports.org/changeset/65858
Author:   jmr at macports.org
Date:     2010-04-01 23:47:55 -0700 (Thu, 01 Apr 2010)
Log Message:
-----------
add 'dependentof:' and 'rdependentof:' pseudo-port selectors (see #22346)

Modified Paths:
--------------
    trunk/base/src/port/port.tcl

Modified: trunk/base/src/port/port.tcl
===================================================================
--- trunk/base/src/port/port.tcl	2010-04-02 05:57:13 UTC (rev 65857)
+++ trunk/base/src/port/port.tcl	2010-04-02 06:47:55 UTC (rev 65858)
@@ -856,7 +856,44 @@
     return [get_ports_with_prop requested 0]
 }
 
+proc get_dependent_ports {portname recursive} {
+    registry::open_dep_map
+    set deplist [registry::list_dependents $portname]
+    # could return specific versions here using registry2.0 features
+    set results {}
+    foreach dep $deplist {
+        add_to_portlist results [list name [lindex $dep 2]]
+    }
 
+    # actually do this iteratively to avoid hitting Tcl's recursion limit
+    if {$recursive} {
+        while 1 {
+            set rportlist {}
+            set newlist {}
+            foreach dep $deplist {
+                set depname [lindex $dep 2]
+                if {![info exists seen($depname)]} {
+                    set seen($depname) 1
+                    set rdeplist [registry::list_dependents $depname]
+                    foreach rdep $rdeplist {
+                        lappend newlist $rdep
+                        add_to_portlist rportlist [list name [lindex $rdep 2]]
+                    }
+                }
+            }
+            if {[llength $rportlist] > 0} {
+                set results [opUnion $results $rportlist]
+                set deplist $newlist
+            } else {
+                break
+            }
+        }
+    }
+
+    return [portlist_sort $results]
+}
+
+
 ##########################################
 # Port expressions
 ##########################################
@@ -1066,6 +1103,19 @@
             set el 1
         }
 
+        ^dependentof:       -
+        ^rdependentof:      {
+            advance
+
+            # Break up the token, because older Tcl switch doesn't support -matchvar
+            regexp {^(\w+):(.*)} $token matchvar selector portname
+
+            set recursive [string equal $selector rdependentof]
+            add_multiple_ports reslist [get_dependent_ports $portname $recursive]
+            
+            set el 1
+        }
+
         [][?*]              { # Handle portname glob patterns
             advance; add_multiple_ports reslist [get_matching_ports $token no glob]
             set el 1
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20100401/5dbec2ad/attachment.html>


More information about the macports-changes mailing list