[64661] trunk/base/src

jmr at macports.org jmr at macports.org
Fri Mar 12 22:49:36 PST 2010


Revision: 64661
          http://trac.macports.org/changeset/64661
Author:   jmr at macports.org
Date:     2010-03-12 22:49:34 -0800 (Fri, 12 Mar 2010)
Log Message:
-----------
factor out code for running targets on portfiles in the registry into new proc registry::run_target, use in portimage

Modified Paths:
--------------
    trunk/base/src/port/port.tcl
    trunk/base/src/registry2.0/portimage.tcl
    trunk/base/src/registry2.0/registry_util.tcl

Modified: trunk/base/src/port/port.tcl
===================================================================
--- trunk/base/src/port/port.tcl	2010-03-13 05:54:13 UTC (rev 64660)
+++ trunk/base/src/port/port.tcl	2010-03-13 06:49:34 UTC (rev 64661)
@@ -1986,32 +1986,9 @@
         set composite_version [composite_version $portversion [array get variations]]
         if {${macports::registry.format} == "receipt_sqlite" && ![catch {set ilist [registry::installed $portname $composite_version]}] && [llength $ilist] == 1} {
             set i [lindex $ilist 0]
-            set iversion [lindex $i 1]
-            set irevision [lindex $i 2]
-            set ivariants [lindex $i 3]
-            if {![catch {set mport [mportopen_installed $portname $iversion $irevision $ivariants [array get options]]}]} {
-                if {[catch {set result [mportexec $mport activate]} result] || $result != 0} {
-                    global errorInfo
-                    catch {mportclose_installed $mport}
-                    ui_debug "$errorInfo"
-                    ui_warn "Unable to execute portfile from registry: $result"
-                    if {![catch {set ilist [registry::active $portname]}] && [llength $ilist] > 0} {
-                        set i [lindex $ilist 0]
-                        set aversion [lindex $i 1]
-                        set arevision [lindex $i 2]
-                        set avariants [lindex $i 3]
-                        if {[string equal "${aversion}_${arevision}${avariants}" "${iversion}_${irevision}${ivariants}"]} {
-                            continue
-                        }
-                    }
-                } else {
-                    mportclose_installed $mport
-                    continue
-                }
-            } else {
-                global errorInfo
-                ui_debug "$errorInfo"
-                ui_warn "Could not open Portfile from registry for $portname $composite_version"
+            set regref [registry::entry open $portname [lindex $i 1] [lindex $i 2] [lindex $i 3] [lindex $i 5]]
+            if {[registry::run_target $regref activate [array get options]]} {
+                continue
             }
         }
         if {![macports::global_option_isset ports_dryrun]} {
@@ -2043,23 +2020,9 @@
             set irevision [lindex $i 2]
             set ivariants [lindex $i 3]
             if {$composite_version == "" || $composite_version == "${iversion}_${irevision}${ivariants}"} {
-                if {![catch {set mport [mportopen_installed $portname $iversion $irevision $ivariants [array get options]]}]} {
-                    if {[catch {set result [mportexec $mport deactivate]} result] || $result != 0} {
-                        global errorInfo
-                        catch {mportclose_installed $mport}
-                        ui_debug "$errorInfo"
-                        ui_warn "Unable to execute portfile from registry: $result"
-                        if {[catch {set ilist [registry::active $portname]}] || [llength $ilist] == 0} {
-                            continue
-                        }
-                    } else {
-                        mportclose_installed $mport
-                        continue
-                    }
-                } else {
-                    global errorInfo
-                    ui_debug "$errorInfo"
-                    ui_warn "Could not open Portfile from registry for $portname $composite_version"
+                set regref [registry::entry open $portname $iversion $irevision $ivariants [lindex $i 5]]
+                if {[registry::run_target $regref deactivate [array get options]]} {
+                    continue
                 }
             }
         }
@@ -2312,28 +2275,11 @@
         set composite_version [composite_version $portversion [array get variations]]
         if {${macports::registry.format} == "receipt_sqlite" && ![catch {set ilist [registry::installed $portname $composite_version]}] && [llength $ilist] == 1} {
             set i [lindex $ilist 0]
-            set iversion [lindex $i 1]
-            set irevision [lindex $i 2]
-            set ivariants [lindex $i 3]
             set iactive [lindex $i 4]
-            if {![catch {set mport [mportopen_installed $portname $iversion $irevision $ivariants [array get options]]}]} {
-                if {($iactive && ([catch {set result [mportexec $mport deactivate]} result] || $result != 0))
-                    || ([catch {set result [mportexec $mport uninstall]} result] || $result != 0)} {
-                    global errorInfo
-                    catch {mportclose_installed $mport}
-                    ui_debug "$errorInfo"
-                    ui_warn "Unable to execute portfile from registry: $result"
-                    if {![registry::entry_exists $portname $iversion $irevision $ivariants]} {
-                        continue
-                    }
-                } else {
-                    mportclose_installed $mport
-                    continue
-                }
-            } else {
-                global errorInfo
-                ui_debug "$errorInfo"
-                ui_warn "Could not open Portfile from registry for $portname $composite_version"
+            set regref [registry::entry open $portname [lindex $i 1] [lindex $i 2] [lindex $i 3] [lindex $i 5]]
+            if {(!$iactive || [registry::run_target $regref deactivate [array get options]])
+                && [registry::run_target $regref uninstall [array get options]]} {
+                continue
             }
         }
 

Modified: trunk/base/src/registry2.0/portimage.tcl
===================================================================
--- trunk/base/src/registry2.0/portimage.tcl	2010-03-13 05:54:13 UTC (rev 64660)
+++ trunk/base/src/registry2.0/portimage.tcl	2010-03-13 06:49:34 UTC (rev 64661)
@@ -100,12 +100,8 @@
             # if another version of this port is active, deactivate it first
             set current [registry::entry installed $name]
             foreach i $current {
-                set iversion [$i version]
-                set irevision [$i revision]
-                set ivariants [$i variants]
-                set ispecifier "${iversion}_${irevision}${ivariants}"
-                if { ![string equal $specifier $ispecifier] } {
-                    lappend todeactivate $ispecifier
+                if { ![string equal $specifier "[$i version]_[$i revision][$i variants]"] } {
+                    lappend todeactivate $i
                 }
             }
 
@@ -118,6 +114,11 @@
                 return -code error "Image error: ${name} @${version}_${revision}${variants} is already active."
             }
         }
+        foreach a $todeactivate {
+            if {![registry::run_target $a deactivate [list ports_nodepcheck 1]]} {
+                deactivate $name "[$a version]_[$a revision][$a variants]" [list ports_nodepcheck 1]
+            }
+        }
     } else {
         # registry1.0
         set ilist [_check_registry $name $v]
@@ -149,10 +150,10 @@
         if { [registry::property_retrieve $ref active] != 0 } {
             return -code error "Image error: ${name} @${version}_${revision}${variants} is already active."
         }
-    }
 
-    foreach a $todeactivate {
-        deactivate $name $a [list ports_nodepcheck 1]
+        foreach a $todeactivate {
+            deactivate $name $a [list ports_nodepcheck 1]
+        }
     }
 
     if {$v != ""} {
@@ -503,7 +504,9 @@
 
             # deactivate ports replaced_by this one
             foreach owner [array names todeactivate] {
-                deactivate [$owner name] "" [list ports_nodepcheck 1]
+                if {![registry::run_target $owner deactivate [list ports_nodepcheck 1]]} {
+                    deactivate [$owner name] "" [list ports_nodepcheck 1]
+                }
             }
 
             # Sort the list in forward order, removing duplicates.
@@ -540,7 +543,7 @@
             }
             # reactivate deactivated ports
             foreach entry [array names todeactivate] {
-                if {[$entry state] == "imaged"} {
+                if {[$entry state] == "imaged" && ![registry::run_target $entry activate ""]} {
                     set pvers "[$entry version]_[$entry revision][$entry variants]"
                     activate [$entry name] $pvers ""
                 }

Modified: trunk/base/src/registry2.0/registry_util.tcl
===================================================================
--- trunk/base/src/registry2.0/registry_util.tcl	2010-03-13 05:54:13 UTC (rev 64660)
+++ trunk/base/src/registry2.0/registry_util.tcl	2010-03-13 06:49:34 UTC (rev 64661)
@@ -79,4 +79,43 @@
     }
 }
 
+## runs the given target of the given port using its stored portfile
+## @return   true if successful, false otherwise
+proc run_target {port target options} {
+    set portspec "[$port name] @[$port version]_[$port revision][$port variants]"
+    if {![catch {set mport [mportopen_installed [$port name] [$port version] [$port revision] [$port variants] [array get options]]}]} {
+        if {[catch {set result [mportexec $mport $target]} result] || $result != 0} {
+            global errorInfo
+            ui_debug "$errorInfo"
+            catch {mportclose_installed $mport}
+            ui_warn "Failed to execute portfile from registry for $portspec"
+            switch $target {
+                activate {
+                    if {[$port state] == "installed"} {
+                        return 1
+                    }
+                }
+                deactivate {
+                    if {[$port state] == "imaged"} {
+                        return 1
+                    }
+                }
+                uninstall {
+                    if {![registry::entry exists $port]} {
+                        return 1
+                    }
+                }
+            }
+        } else {
+            mportclose_installed $mport
+            return 1
+        }
+    } else {
+        global errorInfo
+        ui_debug "$errorInfo"
+        ui_warn "Failed to open Portfile from registry for $portspec"
+    }
+    return 0
 }
+
+}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20100312/7d4ae34a/attachment.html>


More information about the macports-changes mailing list