<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/49df406d8273f203d30186a77251a897f9d8ef79">https://github.com/macports/macports-base/commit/49df406d8273f203d30186a77251a897f9d8ef79</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 49df406d8273f203d30186a77251a897f9d8ef79
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Fri Feb 2 14:05:01 2024 +1100

<span style='display:block; white-space:pre;color:#404040;'>    rdeps --full: don't infinitely loop on circular deps
</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/62711
</span>---
 src/port/port.tcl | 28 ++++++++++++++++++++++------
 1 file changed, 22 insertions(+), 6 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port/port.tcl b/src/port/port.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index b284d6c1a..81fbb4b48 100755
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port/port.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port/port.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2878,6 +2878,10 @@ proc action_deps { action portlist opts } {
</span>                 if {[llength $portstack] <= 0} {
                     break
                 } else {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+                    # no longer processing the last port's deps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    set prev_port [lindex [lindex $portstack end] [lindex $pos_stack end]-1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    set prev_portname [lindex [split $prev_port :] end]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    dict set seen $prev_portname 1
</span>                     continue
                 }
             }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2885,17 +2889,29 @@ proc action_deps { action portlist opts } {
</span>             set cur_portname [lindex [split $cur_port :] end]
             set spaces [string repeat " " [expr {[llength $pos_stack] * 2}]]
             if {![dict exists $seen $cur_portname] || $rdeps_full} {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+                set cyclic_marker ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {[dict exists $seen $cur_portname] && [dict get $seen $cur_portname] == 2} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    # Dependency cycle, note it and don't process deps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    # further to avoid looping infinitely.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    set cyclic_marker " (cyclic dependency)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span>                 if {[macports::ui_isset ports_verbose]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    puts "${spaces}${cur_port}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    puts "${spaces}${cur_port}${cyclic_marker}"
</span>                 } else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    puts "${spaces}${cur_portname}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    puts "${spaces}${cur_portname}${cyclic_marker}"
</span>                 }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                dict set seen $cur_portname 1
</span>                 incr cur_pos
                 set pos_stack [lreplace $pos_stack end end $cur_pos]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {[dict exists $depsof $cur_portname]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    lappend portstack [dict get $depsof $cur_portname]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    lappend pos_stack 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {$cyclic_marker eq ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    if {[dict exists $depsof $cur_portname]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        # Mark as currently processing this port's deps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        dict set seen $cur_portname 2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        lappend portstack [dict get $depsof $cur_portname]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        lappend pos_stack 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        # Just mark as seen
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        dict set seen $cur_portname 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    }
</span>                 }
                 continue
             }
</pre><pre style='margin:0'>

</pre>