[61478] trunk/base/src/macports1.0/macports.tcl

jmr at macports.org jmr at macports.org
Sat Dec 12 11:43:31 PST 2009


Revision: 61478
          http://trac.macports.org/changeset/61478
Author:   jmr at macports.org
Date:     2009-12-12 11:43:29 -0800 (Sat, 12 Dec 2009)
Log Message:
-----------
when upgrading dependencies, don't do depends_{fetch,extract,build} unless they will be needed

Modified Paths:
--------------
    trunk/base/src/macports1.0/macports.tcl

Modified: trunk/base/src/macports1.0/macports.tcl
===================================================================
--- trunk/base/src/macports1.0/macports.tcl	2009-12-12 18:50:50 UTC (rev 61477)
+++ trunk/base/src/macports1.0/macports.tcl	2009-12-12 19:43:29 UTC (rev 61478)
@@ -2621,7 +2621,7 @@
                 array set portinfo [mportinfo $workername]
                 
                 # upgrade its dependencies first
-                set status [_upgrade_dependencies portinfo depscache variationslist options]
+                set status [_upgrade_dependencies portinfo depscache variationslist options yes]
                 if {$status != 0 && ![ui_isset ports_processall]} {
                     catch {mportclose $workername}
                     return $status
@@ -2784,19 +2784,8 @@
     set revision_in_tree "$portinfo(revision)"
     set epoch_in_tree "$portinfo(epoch)"
 
-
-    # first upgrade dependencies
-    if {![info exists options(ports_nodeps)]} {
-        set status [_upgrade_dependencies portinfo depscache variationslist options]
-        if {$status != 0 && ![ui_isset ports_processall]} {
-            catch {mportclose $workername}
-            return $status
-        }
-    } else {
-        ui_debug "Not following dependencies"
-    }
-
     set epoch_override 0
+    set will_install yes
     # check installed version against version in ports
     if { ( [rpm-vercomp $version_installed $version_in_tree] > 0
             || ([rpm-vercomp $version_installed $version_in_tree] == 0
@@ -2816,43 +2805,61 @@
             } else {
                 ui_debug "No need to upgrade! $portname ${version_installed}_${revision_installed} >= $portname ${version_in_tree}_${revision_in_tree}"
             }
-            # Check if we have to do dependents
-            if {[info exists options(ports_do_dependents)]} {
-                # We do dependents ..
-                set options(ports_nodeps) 1
+            set will_install no
+        }
+    }
 
-                registry::open_dep_map
-                set deplist [registry::list_dependents $portname]
+    set will_build no
+    # avoid building again unnecessarily
+    if {$will_install && ([info exists options(ports_upgrade_force)] || $epoch_override == 1
+        || ![registry::entry_exists $newname $version_in_tree $revision_in_tree $portinfo(canonical_active_variants)])} {
+        set will_build yes
+    }
 
-                if { [llength deplist] > 0 } {
-                    foreach dep $deplist {
-                        set mpname [lindex $dep 2]
-                        if {![llength [array get depscache port:${mpname}]]} {
-                            set status [macports::_upgrade $mpname port:${mpname} $variationslist [array get options] depscache]
-                            if {$status != 0 && ![ui_isset ports_processall]} {
-                                catch {mportclose $workername}
-                                return $status
-                            }
+    # first upgrade dependencies
+    if {![info exists options(ports_nodeps)]} {
+        set status [_upgrade_dependencies portinfo depscache variationslist options $will_build]
+        if {$status != 0 && ![ui_isset ports_processall]} {
+            catch {mportclose $workername}
+            return $status
+        }
+    } else {
+        ui_debug "Not following dependencies"
+    }
+
+    if {!$will_install} {
+        # nothing to do for this port, so just check if we have to do dependents
+        if {[info exists options(ports_do_dependents)]} {
+            # We do dependents ..
+            set options(ports_nodeps) 1
+
+            registry::open_dep_map
+            set deplist [registry::list_dependents $portname]
+
+            if { [llength deplist] > 0 } {
+                foreach dep $deplist {
+                    set mpname [lindex $dep 2]
+                    if {![llength [array get depscache port:${mpname}]]} {
+                        set status [macports::_upgrade $mpname port:${mpname} $variationslist [array get options] depscache]
+                        if {$status != 0 && ![ui_isset ports_processall]} {
+                            catch {mportclose $workername}
+                            return $status
                         }
                     }
                 }
             }
-            mportclose $workername
-            return 0
         }
+        mportclose $workername
+        return 0
     }
 
-
-    # build or unarchive version_in_tree
-    if {0 == [string compare "yes" ${macports::portarchivemode}]} {
-        set upgrade_action "archive"
-    } else {
-        set upgrade_action "destroot"
-    }
-
-    # avoid building again unnecessarily
-    if {[info exists options(ports_upgrade_force)] || $epoch_override == 1
-        || ![registry::entry_exists $newname $version_in_tree $revision_in_tree $portinfo(canonical_active_variants)]} {
+    if {$will_build} {
+        # build or unarchive version_in_tree
+        if {0 == [string compare "yes" ${macports::portarchivemode}]} {
+            set upgrade_action "archive"
+        } else {
+            set upgrade_action "destroot"
+        }
         if {[catch {set result [mportexec $workername $upgrade_action]} result] || $result != 0} {
             if {[info exists ::errorInfo]} {
                 ui_debug "$::errorInfo"
@@ -2994,7 +3001,7 @@
 # upgrade_dependencies: helper proc for upgrade
 # Calls upgrade on each dependency listed in the PortInfo.
 # Uses upvar to access the variables.
-proc macports::_upgrade_dependencies {portinfoname depscachename variationslistname optionsname} {
+proc macports::_upgrade_dependencies {portinfoname depscachename variationslistname optionsname {build_needed yes}} {
     upvar $portinfoname portinfo $depscachename depscache \
           $variationslistname variationslist \
           $optionsname options
@@ -3013,8 +3020,13 @@
     unset -nocomplain options(ports_do_dependents)
 
     set status 0
-    # each dep type is upgraded
-    foreach dtype {depends_fetch depends_extract depends_build depends_lib depends_run} {
+    # each required dep type is upgraded
+    if {$build_needed} {
+        set dtypes {depends_fetch depends_extract depends_build depends_lib depends_run}
+    } else {
+        set dtypes {depends_lib depends_run}
+    }
+    foreach dtype $dtypes {
         if {[info exists portinfo($dtype)]} {
             foreach i $portinfo($dtype) {
                 set d [_get_dep_port $parentworker $i]
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20091212/08eeb2ad/attachment-0001.html>


More information about the macports-changes mailing list