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

jmr at macports.org jmr at macports.org
Sat Jun 7 16:28:21 PDT 2008


Revision: 37442
          http://trac.macosforge.org/projects/macports/changeset/37442
Author:   jmr at macports.org
Date:     2008-06-07 16:28:20 -0700 (Sat, 07 Jun 2008)

Log Message:
-----------
Make uninstalling the old version of a port during upgrade work without -f,
whether due to -u, epoch override, or being in direct mode.

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

Modified: trunk/base/src/macports1.0/macports.tcl
===================================================================
--- trunk/base/src/macports1.0/macports.tcl	2008-06-07 23:06:23 UTC (rev 37441)
+++ trunk/base/src/macports1.0/macports.tcl	2008-06-07 23:28:20 UTC (rev 37442)
@@ -2143,15 +2143,21 @@
     }
 
     # uninstall old ports
-    if {[info exists options(port_uninstall_old)] || $epoch_override == 1 || [info exists options(ports_force)] || 0 != [string compare "image" ${macports::registry.installtype}] } {
+    if { $epoch_override == 1 || [info exists options(ports_force)] || 0 != [string compare "image" ${macports::registry.installtype}] } {
         # uninstall old
         ui_debug "Uninstalling $iname ${version_installed}_$revision_installed$oldvariant"
-        if {[catch {portuninstall::uninstall $iname ${version_installed}_$revision_installed$oldvariant $optionslist} result]} {
+        # we have to force the uninstall in case of dependents
+        set force_cur [info exists options(ports_force)]
+        set options(ports_force) yes
+        if {[catch {portuninstall::uninstall $iname ${version_installed}_$revision_installed$oldvariant [array get options]} result]} {
             global errorInfo
             ui_debug "$errorInfo"
             ui_error "Uninstall $iname ${version_installed}_$revision_installed$oldvariant failed: $result"
             return 1
         }
+        if {!$force_cur} {
+            unset options(ports_force)
+        }
     } else {
         # XXX deactivate version_installed
         if {[catch {portimage::deactivate $iname ${version_installed}_$revision_installed$oldvariant $optionslist} result]} {
@@ -2160,6 +2166,11 @@
             ui_error "Deactivating $iname ${version_installed}_$revision_installed failed: $result"
             return 1
         }
+        if { [info exists options(port_uninstall_old)] } {
+            # uninstalling now could fail due to dependents when not forced,
+            # because the new version is not installed
+            set uninstall_later yes
+        }
     }
 
     if {[catch {set result [mportexec $workername install]} result]} {
@@ -2168,6 +2179,16 @@
         ui_error "Couldn't activate $portname ${version_in_tree}_$revision_in_tree$oldvariant: $result"
         return 1
     }
+    
+    if { [info exists uninstall_later] && $uninstall_later == yes } {
+        ui_debug "Uninstalling $iname ${version_installed}_$revision_installed$oldvariant"
+        if {[catch {portuninstall::uninstall $iname ${version_installed}_$revision_installed$oldvariant $optionslist} result]} {
+            global errorInfo
+            ui_debug "$errorInfo"
+            ui_error "Uninstall $iname ${version_installed}_$revision_installed$oldvariant failed: $result"
+            return 1
+        }
+    }
 
     # Check if we have to do dependents
     if {[info exists options(ports_do_dependents)]} {

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macports-changes/attachments/20080607/8d869cf3/attachment.htm 


More information about the macports-changes mailing list