<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>