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

raimue at macports.org raimue at macports.org
Mon Feb 4 07:43:08 PST 2013


Revision: 102483
          https://trac.macports.org/changeset/102483
Author:   raimue at macports.org
Date:     2013-02-04 07:43:08 -0800 (Mon, 04 Feb 2013)
Log Message:
-----------
port1.0/portutil.tcl:
Rewrite recursive_collect_deps for tracemode to use dependency information from
the registry instead of Portfiles from the tree.

Previously the information was extracted from Portfiles in the tree using the
default variant set. This was the wrong information in many cases when ports
were installed with a different set of variants or the Portfile in the tree was
updated with new dependencies.

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

Modified: trunk/base/src/port1.0/portutil.tcl
===================================================================
--- trunk/base/src/port1.0/portutil.tcl	2013-02-04 13:48:24 UTC (rev 102482)
+++ trunk/base/src/port1.0/portutil.tcl	2013-02-04 15:43:08 UTC (rev 102483)
@@ -1424,20 +1424,25 @@
                         }
                     }
 
-                    # Dependencies are in the form verb:[param:]port
-                    set depsPorts {}
+                    # Recursively collect all dependencies from registry for tracing
+                    set deplist {}
                     foreach depspec $depends {
-                        # grab the portname portion of the depspec
-                        set dep_portname [lindex [split $depspec :] end]
-                        lappend depsPorts $dep_portname
-                    }
+                        # Resolve dependencies to actual ports
+                        set name [_get_dep_port $depspec]
 
-                    set portlist $depsPorts
-                    foreach depName $depsPorts {
-                        set portlist [recursive_collect_deps $depName $deptypes $portlist]
+                        # If portname is empty, the dependency is already satisfied by other means,
+                        # for example a bin: dependency on a file not installed by MacPorts
+                        if {$name != ""} {
+                            if {[lsearch -exact $deplist $name] == -1} {
+                                lappend deplist $name
+                                set deplist [recursive_collect_deps $name $deplist]
+                            }
+                        }
                     }
 
-                    if {[llength $deptypes] > 0} {tracelib setdeps $portlist}
+                    ui_debug "Tracemode will respect recursively collected port dependencies: [lsort $deplist]"
+
+                    if {[llength $deptypes] > 0} {tracelib setdeps $deplist}
                 }
 
                 if {$result == 0} {
@@ -1537,40 +1542,23 @@
 }
 
 # recursive dependency search for portname
-proc recursive_collect_deps {portname deptypes {depsfound {}}} \
+proc recursive_collect_deps {portname {depsfound {}}} \
 {
-    set res [mport_lookup $portname]
-    if {[llength $res] < 2} \
-    {
-        # Even if this port cannot be found in the index,
-        # it is still listed as dependency
-        if {[lsearch -exact $depsfound $portname] == -1} {
-            lappend depsfound $portname
-        }
-        return $depsfound
-    }
+    # Get the active port from the registry
+    # There can be only one port active at a time, so take the first result only
+    set regentry [lindex [registry_active $portname] 0]
+    # Get port dependencies from the registry
+    set deplist [registry_list_depends [lindex $regentry 0] [lindex $regentry 1] [lindex $regentry 2] [lindex $regentry 3]]
 
-    set depends {}
-
-    array set portinfo [lindex $res 1]
-    foreach deptype $deptypes \
-    {
-        if {[info exists portinfo($deptype)] && $portinfo($deptype) != ""} \
-        {
-            set depends [concat $depends $portinfo($deptype)]
+    foreach item $deplist {
+        set name [lindex $item 0]
+        if {[lsearch -exact $depsfound $name] == -1} {
+            lappend depsfound $name
+            set depsfound [recursive_collect_deps $name $depsfound]
         }
     }
 
-    set portdeps $depsfound
-    foreach depspec $depends \
-    {
-        set portname [lindex [split $depspec :] end]
-        if {[lsearch -exact $portdeps $portname] == -1} {
-            lappend portdeps $portname
-            set portdeps [recursive_collect_deps $portname $deptypes $portdeps]
-        }
-    }
-    return $portdeps
+    return $depsfound
 }
 
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20130204/6197c2be/attachment.html>


More information about the macports-changes mailing list