[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