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