<pre style='margin:0'>
Ryan Schmidt (ryandesign) pushed a commit to branch master
in repository mpbb.

</pre>
<p><a href="https://github.com/macports/mpbb/commit/c8db5a3f36610a13f3c99915e32a6fa853982be9">https://github.com/macports/mpbb/commit/c8db5a3f36610a13f3c99915e32a6fa853982be9</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 c8db5a3  More selectively uninstalling ports with only 1 dep
</span>c8db5a3 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit c8db5a3f36610a13f3c99915e32a6fa853982be9
</span>Author: Ryan Schmidt <ryandesign@macports.org>
AuthorDate: Sat Apr 3 01:21:23 2021 -0500

<span style='display:block; white-space:pre;color:#404040;'>    More selectively uninstalling ports with only 1 dep
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Don't uninstall all ports that have only 1 dependency. Only uninstall
</span><span style='display:block; white-space:pre;color:#404040;'>    those ports with 1 dependency if that dependency also has only 0 or 1
</span><span style='display:block; white-space:pre;color:#404040;'>    dependencies and so on.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    See: https://trac.macports.org/ticket/57464
</span><span style='display:block; white-space:pre;color:#404040;'>    See: https://trac.macports.org/ticket/62621
</span>---
 tools/uninstall-unneeded-ports.tcl | 39 ++++++++++++++++++++++++++++----------
 1 file changed, 29 insertions(+), 10 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/tools/uninstall-unneeded-ports.tcl b/tools/uninstall-unneeded-ports.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index b2b9817..9567006 100755
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/tools/uninstall-unneeded-ports.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/tools/uninstall-unneeded-ports.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -49,6 +49,7 @@ foreach source $macports::sources {
</span>         try -pass_signal {
             while {[gets $fd line] >= 0} {
                 array unset portinfo
<span style='display:block; white-space:pre;background:#e0ffe0;'>+                set name [lindex $line 0]
</span>                 set len  [lindex $line 1]
                 set line [read $fd $len]
                 array set portinfo $line
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -57,8 +58,9 @@ foreach source $macports::sources {
</span>                 foreach field {depends_build depends_extract depends_fetch depends_lib depends_patch depends_run} {
                     if {[info exists portinfo($field)]} {
                         foreach dependency $portinfo($field) {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                            set dependency_name [lindex [split $dependency {:}] end]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                            incr dependents([string tolower $dependency_name])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            set lowercase_dependency_name [string tolower [lindex [split $dependency :] end]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            incr dependents($lowercase_dependency_name)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            set a_dependency($lowercase_dependency_name) $name
</span>                         }
                     }
                 }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -74,6 +76,21 @@ foreach source $macports::sources {
</span>     }
 }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+proc removal_reason {installed_name} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global dependents a_dependency
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set reason ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set lowercase_name [string tolower $installed_name]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {![info exists dependents($lowercase_name)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set reason "no port in the PortIndex depends on $installed_name"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } elseif {$dependents($lowercase_name) == 1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set dependency_reason [removal_reason $a_dependency($lowercase_name)]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {$dependency_reason ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set reason "only $a_dependency($lowercase_name) depends on $installed_name and $dependency_reason"
</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;'>+    return $reason
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> foreach port [registry::entry imaged] {
     # Set to yes if a port should be uninstalled
     set uninstall no
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -92,20 +109,22 @@ foreach port [registry::entry imaged] {
</span>         array unset portinfo
         array set portinfo [lindex $portindex_match 1]
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        set portspec "$installed_name @${installed_version}_$installed_revision$installed_variants"
</span>         if {$portinfo(version) ne $installed_version || $portinfo(revision) != $installed_revision} {
             # The version in the index is different than the installed one
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            ui_msg "Removing ${installed_name} @${installed_version}_${installed_revision}${installed_variants} because there is a newer version in the PortIndex"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ui_msg "Removing $portspec because there is a newer version in the PortIndex"
</span>             set uninstall yes
         } else {
             set lowercase_name [string tolower $installed_name]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {![info exists dependents($lowercase_name)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ui_msg "Removing ${installed_name} @${installed_version}_${installed_revision}${installed_variants} because no port in the PortIndex depends on it"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set uninstall yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } elseif {$dependents($lowercase_name) == 1} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ui_msg "Removing ${installed_name} @${installed_version}_${installed_revision}${installed_variants} because only 1 port in the PortIndex depends on it"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set reason [removal_reason $lowercase_name]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {$reason ne ""} {
</span>                 set uninstall yes
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            } elseif {no} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ui_msg "Not removing ${installed_name} @${installed_version}_${installed_revision}${installed_variants} because it has $dependents($lowercase_name) dependents"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ui_msg "Removing $portspec because $reason"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set uninstall no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {no} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ui_msg "Not removing $portspec because it has $dependents($lowercase_name) dependents"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span>             }
         }
     }
</pre><pre style='margin:0'>

</pre>