[35790] trunk/base/src/port1.0/portutil.tcl

raimue at macports.org raimue at macports.org
Sun Apr 6 12:00:50 PDT 2008


Revision: 35790
          http://trac.macosforge.org/projects/macports/changeset/35790
Author:   raimue at macports.org
Date:     2008-04-06 12:00:49 -0700 (Sun, 06 Apr 2008)

Log Message:
-----------
port1.0/portutil.tcl:
Avoid parsing Portfiles multiple times in recursive_collect_deps.
This makes tracemode a lot faster if there are many deps.

Modified Paths:
--------------
    trunk/base/src/port1.0/portutil.tcl

Modified: trunk/base/src/port1.0/portutil.tcl
===================================================================
--- trunk/base/src/port1.0/portutil.tcl	2008-04-06 18:00:59 UTC (rev 35789)
+++ trunk/base/src/port1.0/portutil.tcl	2008-04-06 19:00:49 UTC (rev 35790)
@@ -1227,13 +1227,10 @@
                     
                         set portlist $depsPorts
                         foreach depName $depsPorts {
-                            set portlist [concat $portlist [recursive_collect_deps $depName $deptypes]]
+                            set portlist [recursive_collect_deps $depName $deptypes $portlist]
                         }
-                        #uniquer from http://aspn.activestate.com/ASPN/Cookbook/Tcl/Recipe/147663
-                        array set a [split "[join $portlist {::}]:" {:}]
-                        set depsPorts [array names a]
                     
-                        if {[llength $deptypes] > 0} {tracelib setdeps $depsPorts}
+                        if {[llength $deptypes] > 0} {tracelib setdeps $portlist}
                     }
                 }
             
@@ -1305,9 +1302,8 @@
     return $result
 }
 
-# recursive found depends for portname
-# It isn't ideal, because it scan many ports multiple time
-proc recursive_collect_deps {portname deptypes} \
+# recursive dependency search for portname
+proc recursive_collect_deps {portname deptypes {depsfound {}}} \
 {
     set res [mport_search ^$portname\$]
     if {[llength $res] < 2} \
@@ -1325,13 +1321,15 @@
             set depends [concat $depends $portinfo($deptype)]
         }
     }
-    
-    set portdeps {}
+
+    set portdeps $depsfound
     foreach depspec $depends \
     {
         set portname [lindex [split $depspec :] end]
-        lappend portdeps $portname
-        set portdeps [concat $portdeps [recursive_collect_deps $portname $deptypes]]
+        if {[lsearch -exact $portdeps $portname] == -1} { 
+            lappend portdeps $portname
+            set portdeps [recursive_collect_deps $portname $deptypes $portdeps]
+        }
     }
     return $portdeps
 }

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macports-changes/attachments/20080406/1f963439/attachment.html


More information about the macports-changes mailing list