[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