<pre style='margin:0'>
Joshua Root (jmroot) pushed a commit to branch master
in repository macports-base.
</pre>
<p><a href="https://github.com/macports/macports-base/commit/5f41bb41b310d2d4671fbfffbd718ceba9834197">https://github.com/macports/macports-base/commit/5f41bb41b310d2d4671fbfffbd718ceba9834197</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'> new 5f41bb41 Relax activate/deactivate error conditions
</span>5f41bb41 is described below
<span style='display:block; white-space:pre;color:#808000;'>commit 5f41bb41b310d2d4671fbfffbd718ceba9834197
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Thu Apr 15 12:13:51 2021 +1000
<span style='display:block; white-space:pre;color:#404040;'> Relax activate/deactivate error conditions
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Treat activating an already active port and deactivating an already
</span><span style='display:block; white-space:pre;color:#404040;'> inactive port as harmless no-ops. Specifying a port or version of a
</span><span style='display:block; white-space:pre;color:#404040;'> port that isn't installed is still an error.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Fixes: https://trac.macports.org/ticket/56817
</span>---
src/registry2.0/portimage.tcl | 40 +++++++++++++++++++++++++++++++++++-----
1 file changed, 35 insertions(+), 5 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/registry2.0/portimage.tcl b/src/registry2.0/portimage.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index f91a54c7..31a05be9 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/registry2.0/portimage.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/registry2.0/portimage.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -109,6 +109,11 @@ proc activate {name {version ""} {revision ""} {variants 0} {optionslist ""}} {
</span> set specifier "${version}_${revision}${variants}"
set location [$requested location]
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[$requested state] eq "installed"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_info "${name} @${specifier} is already active."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # if another version of this port is active, deactivate it first
set current [registry::entry installed $name]
foreach i $current {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -124,9 +129,6 @@ proc activate {name {version ""} {revision ""} {variants 0} {optionslist ""}} {
</span> if {![::file isfile $location]} {
return -code error "Image error: Can't find image file $location"
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[$requested state] eq "installed"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return -code error "Image error: ${name} @${specifier} is already active."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span> }
foreach a $todeactivate {
if {$noexec || ![registry::run_target $a deactivate [list ports_nodepcheck 1]]} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -173,7 +175,20 @@ proc deactivate {name {version ""} {revision ""} {variants 0} {optionslist ""}}
</span> if { [llength $ilist] == 1 } {
set requested [lindex $ilist 0]
} else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- throw registry::image-error "Image error: port ${name} is not active."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ilist [_check_registry $name $version $revision $variants 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[llength $ilist] > 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_info "port ${name} is already inactive"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set v ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$version ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set v " @${version}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$revision ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ append v _${revision}${variants}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ throw registry::image-error "Image error: port ${name}${v} is not active."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span> }
# set name again since the one we were passed may not have had the correct case
set name [$requested name]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -185,6 +200,18 @@ proc deactivate {name {version ""} {revision ""} {variants 0} {optionslist ""}}
</span> if {$revision ne ""} {
append v _${revision}${variants}
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ilist [_check_registry $name $version $revision $variants 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach inact $ilist {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$revision ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set thisv [$inact version]_[$inact revision][$inact variants]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set thisv [$inact version]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$v eq $thisv} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_info "port ${name} @${thisv} is already inactive"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span> return -code error "Active version of $name is not $v but ${specifier}."
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -208,7 +235,7 @@ proc deactivate {name {version ""} {revision ""} {variants 0} {optionslist ""}}
</span> _deactivate_contents $requested [$requested files] $force
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-proc _check_registry {name version revision variants} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc _check_registry {name version revision variants {return_all 0}} {
</span> global UI_PREFIX
set searchkeys $name
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -224,6 +251,9 @@ proc _check_registry {name version revision variants} {
</span> }
}
set ilist [registry::entry imaged {*}$searchkeys]
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$return_all} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return $ilist
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span>
if { [llength $ilist] > 1 } {
set portilist [list]
</pre><pre style='margin:0'>
</pre>