<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/cea9833fd1f84475293be3201ba80fb8ad4c239f">https://github.com/macports/macports-base/commit/cea9833fd1f84475293be3201ba80fb8ad4c239f</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 cea9833f Improve dep cycle handling and reporting
</span>cea9833f is described below
<span style='display:block; white-space:pre;color:#808000;'>commit cea9833fd1f84475293be3201ba80fb8ad4c239f
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Thu Apr 15 13:28:53 2021 +1000
<span style='display:block; white-space:pre;color:#404040;'> Improve dep cycle handling and reporting
</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/59289
</span>---
src/macports1.0/macports.tcl | 26 ++++++++++++++++----------
src/macports1.0/macports_dlist.tcl | 13 ++++++++++---
2 files changed, 26 insertions(+), 13 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/macports1.0/macports.tcl b/src/macports1.0/macports.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index f52e09a5..1d51beb6 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/macports1.0/macports.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/macports1.0/macports.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2323,14 +2323,20 @@ proc mportexec {mport target} {
</span> if {$result ne ""} {
##
# When this happens, the failing port usually already printed an
<span style='display:block; white-space:pre;background:#ffe0e0;'>- # error message. Omit this one to avoid cluttering the output and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # hiding the *real* problem.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #set errstring "The following dependencies were not installed:"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #foreach ditem $result {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # append errstring " [ditem_key $ditem provides]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #ui_error $errstring
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # error message. Don't print another here to avoid cluttering the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # output and hiding the *real* problem, unless the problem
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # appears to be a circular dependency, which won't have produced
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # an error message yet.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$dlist_eval_reason eq "unmet_deps"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set errstring "The following dependencies were not installed\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ because all of them have unmet dependencies (likely due\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ to a dependency cycle):"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach ditem $result {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ append errstring " [ditem_key $ditem provides]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_error $errstring
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span> foreach ditem $dlist {
catch {mportclose $ditem}
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3920,6 +3926,8 @@ proc macports::_upgrade {portname dspec variationslist optionslist {depscachenam
</span> array unset portinfo
array set portinfo [mportinfo $mport]
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ # mark it in the cache now to guard against circular dependencies
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set depscache(port:$portname) 1
</span> # upgrade its dependencies first
set status [_upgrade_dependencies portinfo depscache variationslist options]
if {$status != 0 && $status != 2 && ![ui_isset ports_processall]} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3938,8 +3946,6 @@ proc macports::_upgrade {portname dspec variationslist optionslist {depscachenam
</span> catch {mportclose $mport}
return $result
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- # we just installed it, so mark it done in the cache
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set depscache(port:$portname) 1
</span> mportclose $mport
} else {
# dependency is satisfied by something other than the named port
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/macports1.0/macports_dlist.tcl b/src/macports1.0/macports_dlist.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index b43ccb69..f5c726a1 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/macports1.0/macports_dlist.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/macports1.0/macports_dlist.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -278,10 +278,15 @@ proc dlist_get_next {dlist statusdict} {
</span> # occures; if 0, then dlist_eval will return on the
# first failure
# selector - the selector for determining eligibility
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# reason_var - variable name to return failure reason in
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-proc dlist_eval {dlist testcond handler {canfail "0"} {selector "dlist_get_next"}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc dlist_eval {dlist testcond handler {canfail "0"} {selector "dlist_get_next"} {reason_var "dlist_eval_reason"}} {
</span> array set statusdict [list]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$reason_var ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ upvar $reason_var reason
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set reason ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # Do a pre-run seeing if any items automagically
# can evaluate to true.
if {$testcond ne ""} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -301,7 +306,7 @@ proc dlist_eval {dlist testcond handler {canfail "0"} {selector "dlist_get_next"
</span>
if {$ditem eq {}} {
if {[llength $dlist] > 0} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- ui_debug "dlist_eval: all entries in dependency list have unsatisfied dependencies; can't process"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set reason unmet_deps
</span> }
break
} else {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -310,6 +315,7 @@ proc dlist_eval {dlist testcond handler {canfail "0"} {selector "dlist_get_next"
</span> if {[catch {{*}$handler $ditem} result]} {
ui_debug $::errorInfo
ui_error $result
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ set reason handler
</span> return $dlist
}
# No news is good news at this point.
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -321,6 +327,7 @@ proc dlist_eval {dlist testcond handler {canfail "0"} {selector "dlist_get_next"
</span>
# Abort if we're not allowed to fail
if {$canfail == 0 && $result != 0} {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ set reason handler
</span> return $dlist
}
</pre><pre style='margin:0'>
</pre>