<pre style='margin:0'>
Joshua Root (jmroot) pushed a commit to branch master
in repository mpbb.
</pre>
<p><a href="https://github.com/macports/mpbb/commit/1e97a14531fc27423c51114270b3a735c9465798">https://github.com/macports/mpbb/commit/1e97a14531fc27423c51114270b3a735c9465798</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 1e97a14 global cleanup
</span>1e97a14 is described below
<span style='display:block; white-space:pre;color:#808000;'>commit 1e97a14531fc27423c51114270b3a735c9465798
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Sun Mar 10 14:44:47 2024 +1100
<span style='display:block; white-space:pre;color:#404040;'> global cleanup
</span>---
tools/dependencies.tcl | 118 ++++++++++++++++++++-----------------
tools/failcache.tcl | 24 ++++----
tools/mirror-multi.tcl | 52 +++++++++-------
tools/sort-with-subports.tcl | 51 ++++++++--------
tools/uninstall-unneeded-ports.tcl | 2 +-
5 files changed, 136 insertions(+), 111 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/tools/dependencies.tcl b/tools/dependencies.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index f1f3016..eabd751 100755
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/tools/dependencies.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/tools/dependencies.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -40,22 +40,22 @@ source [file join [file dirname [info script]] failcache.tcl]
</span>
set failcache_dir ""
set logs_dir ""
<span style='display:block; white-space:pre;background:#ffe0e0;'>-while {[string range [lindex $::argv 0] 0 1] eq "--"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- switch -- [lindex $::argv 0] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+while {[string range [lindex $argv 0] 0 1] eq "--"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ switch -- [lindex $argv 0] {
</span> --failcache_dir {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set failcache_dir [lindex $::argv 1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set ::argv [lreplace $::argv 0 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set failcache_dir [lindex $argv 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set argv [lreplace $argv 0 0]
</span> }
--logs_dir {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set logs_dir [lindex $::argv 1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set ::argv [lreplace $::argv 0 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set logs_dir [lindex $argv 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set argv [lreplace $argv 0 0]
</span> }
default {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- ui_error "unknown option: [lindex $::argv 0]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_error "unknown option: [lindex $argv 0]"
</span> exit 2
}
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set ::argv [lreplace $::argv 0 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set argv [lreplace $argv 0 0]
</span> }
if {$logs_dir ne ""} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -66,7 +66,7 @@ if {$logs_dir ne ""} {
</span> set log_subports_progress $log_status_dependencies
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-if {[llength $::argv] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if {[llength $argv] == 0} {
</span> puts stderr "Usage: $argv0 <portname> \[(+|-)variant...\]"
exit 2
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -80,7 +80,7 @@ if {[catch {mportinit "" my_global_options ""} result]} {
</span> }
# look up the path of the Portfile for the given port
<span style='display:block; white-space:pre;background:#ffe0e0;'>-set portname [lindex $::argv 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set portname [lindex $argv 0]
</span> #try -pass_signal {...}
try {
set result [mportlookup $portname]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -95,7 +95,7 @@ try {
</span>
# parse the given variants from the command line
set variants [dict create]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-foreach item [lrange $::argv 1 end] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+foreach item [lrange $argv 1 end] {
</span> foreach {_ sign variant} [regexp -all -inline -- {([-+])([[:alpha:]_]+[\w\.]*)} $item] {
dict set variants $variant $sign
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -115,7 +115,7 @@ set portinfo [dict merge $portinfo [mportinfo $mport]]
</span> # Also checking for matching archive, in case supported_archs changed
if {[registry::entry imaged $portname [dict get $portinfo version] [dict get $portinfo revision] [dict get $portinfo canonical_active_variants]] ne ""
&& [[ditem_key $mport workername] eval [list _archive_available]]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- puts "$::argv already installed, not installing or activating dependencies"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts "$argv already installed, not installing or activating dependencies"
</span> exit 0
}
# Ensure build-time deps are always included for the top-level port,
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -126,14 +126,11 @@ if {[registry::entry imaged $portname [dict get $portinfo version] [dict get $po
</span> # buildbot will exclude ports that have an archive deployed.
[ditem_key $mport workername] eval [list set portutil::archive_available_result 0]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-set toplevel_depstypes [list depends_fetch depends_extract depends_patch depends_build depends_lib depends_run]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set recursive_depstypes [list depends_lib depends_run]
</span> foreach p [split $env(PATH) :] {
if {![string match ${macports::prefix}* $p]} {
lappend bin_search_path $p
}
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-set lib_search_path [list /Library/Frameworks /System/Library/Frameworks /lib /usr/lib]
</span>
# check if depspec is fulfilled by a port, and if so, append its
# name to the variable named by retvar
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -144,12 +141,13 @@ proc check_dep_needs_port {depspec retvar} {
</span> set depregex [lindex $splitlist 1]
switch [lindex $splitlist 0] {
bin {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ global bin_search_path
</span> set depregex \^$depregex\$
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set search_path $::bin_search_path
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set search_path $bin_search_path
</span> set executable 1
}
lib {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set search_path $::lib_search_path
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set search_path {/Library/Frameworks /System/Library/Frameworks /lib /usr/lib}
</span> set i [string first . $depregex]
if {$i < 0} {set i [string length $depregex]}
set depname [string range $depregex 0 ${i}-1]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -184,7 +182,8 @@ proc check_dep_needs_port {depspec retvar} {
</span> # Get the ports needed by a given port.
proc collect_deps {portinfo retvar} {
upvar $retvar ret
<span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach deptype $::recursive_depstypes {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Recursive deps are not being built, so only their runtime deps are needed.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach deptype {depends_lib depends_run} {
</span> if {[dict exists $portinfo $deptype]} {
foreach depspec [dict get $portinfo $deptype] {
check_dep_needs_port $depspec ret
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -237,8 +236,9 @@ proc open_port {portname} {
</span> }
set portinfo [dict merge $portinfo [mportinfo $mport]]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {![dict exists $::mportinfo_array $mport]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- dict set ::mportinfo_array $mport $portinfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global mportinfo_array
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![dict exists $mportinfo_array $mport]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set mportinfo_array $mport $portinfo
</span> }
return [list $mport $portinfo]
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -262,12 +262,14 @@ proc deactivate_with_dependents {e} {
</span> }
proc deactivate_unneeded {portinfo} {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ global mportinfo_array
</span> # Unfortunately mportdepends doesn't have quite the right semantics
# to be useful here. It's concerned with what is needed and not
# present, whereas here we're concerned with removing what we can do
# without. Future API opportunity?
set deplist [list]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach deptype $::toplevel_depstypes {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # The top level port is being built, so all build time and run time deps are needed.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach deptype {depends_fetch depends_extract depends_patch depends_build depends_lib depends_run} {
</span> if {[dict exists $portinfo $deptype]} {
foreach depspec [dict get $portinfo $deptype] {
check_dep_needs_port $depspec deplist
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -304,7 +306,7 @@ proc deactivate_unneeded {portinfo} {
</span> if {![dict exists $needed_array [$e name]]} {
deactivate_with_dependents $e
} else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set entryinfo [dict get $::mportinfo_array [dict get $mports_array [$e name]]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set entryinfo [dict get $mportinfo_array [dict get $mports_array [$e name]]]
</span> if {[dict get $entryinfo version] ne [$e version]
|| [dict get $entryinfo revision] != [$e revision]
|| [dict get $entryinfo canonical_active_variants] ne [$e variants]} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -355,8 +357,9 @@ if {[catch {mportdepends $mport "activate" 1 1 0 dlist} result]} {
</span>
proc append_it {ditem} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- lappend ::dlist_sorted $ditem
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- dict set ::mportinfo_array $ditem [mportinfo $ditem]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global dlist_sorted mportinfo_array
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lappend dlist_sorted $ditem
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set mportinfo_array $ditem [mportinfo $ditem]
</span> return 0
}
try {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -387,7 +390,8 @@ puts $log_status_dependencies ""
</span>
## ensure dependencies are installed and active
proc checkdep_failcache {ditem} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set depinfo [dict get $::mportinfo_array $ditem]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global mportinfo_array
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set depinfo [dict get $mportinfo_array $ditem]
</span>
if {[check_failcache [dict get $depinfo name] [ditem_key $ditem porturl] [dict get $depinfo canonical_active_variants]]} {
tee "Dependency '[dict get $depinfo name]' with variants '[dict get $depinfo canonical_active_variants]' has previously failed and is required." $::log_status_dependencies stderr
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -414,7 +418,8 @@ if {$failcache_dir ne ""} {
</span> # clean up any work directories left over from earlier
# (avoids possible errors with different variants in the statefile)
proc clean_workdirs {} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set build_dir [file join $macports::portdbpath build]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global macports::portdbpath
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set build_dir [file join $portdbpath build]
</span> foreach dir [glob -nocomplain -directory $build_dir *] {
file delete -force -- $dir
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -422,14 +427,16 @@ proc clean_workdirs {} {
</span>
# Returns 0 if dep is installed, 1 if not
proc install_dep_archive {ditem} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set depinfo [dict get $::mportinfo_array $ditem]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- incr ::dependencies_counter
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set msg "Installing dependency ($::dependencies_counter of $::dependencies_count) '[dict get $depinfo name]' with variants '[dict get $depinfo canonical_active_variants]'"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- puts -nonewline $::log_status_dependencies "$msg ... "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global mportinfo_array dependencies_counter dependencies_count \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ log_status_dependencies
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set depinfo [dict get $mportinfo_array $ditem]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ incr dependencies_counter
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set msg "Installing dependency ($dependencies_counter of $dependencies_count) '[dict get $depinfo name]' with variants '[dict get $depinfo canonical_active_variants]'"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts -nonewline $log_status_dependencies "$msg ... "
</span> puts "----> ${msg}"
if {[registry::entry imaged [dict get $depinfo name] [dict get $depinfo version] [dict get $depinfo revision] [dict get $depinfo canonical_active_variants]] ne ""} {
puts "Already installed, nothing to do"
<span style='display:block; white-space:pre;background:#ffe0e0;'>- puts $::log_status_dependencies {[OK]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts $log_status_dependencies {[OK]}
</span> return 0
}
clean_workdirs
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -447,13 +454,13 @@ proc install_dep_archive {ditem} {
</span> # it's quick and easy to check and may save a build.
if {[dict exists $depinfo known_fail] && [string is true -strict [dict get $depinfo known_fail]]} {
puts stderr "Dependency '[dict get $depinfo name]' with variants '[dict get $depinfo canonical_active_variants]' is known to fail, aborting."
<span style='display:block; white-space:pre;background:#ffe0e0;'>- puts $::log_status_dependencies {[FAIL] (known_fail)}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts $log_status_dependencies {[FAIL] (known_fail)}
</span> puts $::log_subports_progress "Building '$::portname' ... \[FAIL\] (dependency '[dict get $depinfo name]' known to fail) maintainers: [get_maintainers $::portname [dict get $depinfo name]]."
exit 1
}
# This dep will have to be built, not just installed
puts stderr "Fetching archive for dependency '[dict get $depinfo name]' with variants '[dict get $depinfo canonical_active_variants]' failed."
<span style='display:block; white-space:pre;background:#ffe0e0;'>- puts $::log_status_dependencies {[MISSING]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts $log_status_dependencies {[MISSING]}
</span> return 1
}
# Now install it
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -464,29 +471,32 @@ proc install_dep_archive {ditem} {
</span> }
if {$fail || $result > 0} {
puts stderr "Installing from archive for dependency '[dict get $depinfo name]' with variants '[dict get $depinfo canonical_active_variants]' failed, aborting."
<span style='display:block; white-space:pre;background:#ffe0e0;'>- puts $::log_status_dependencies {[FAIL]}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- puts $::log_subports_progress "Building '$::portname' ... \[FAIL\] (failed to install dependency '$depinfo(name)')."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts $log_status_dependencies {[FAIL]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts $::log_subports_progress "Building '$::portname' ... \[FAIL\] (failed to install dependency '[dict get $depinfo name]')."
</span> exit 1
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- puts $::log_status_dependencies {[OK]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts $log_status_dependencies {[OK]}
</span> return 0
}
# mportexec uses this global variable, so we have to clean up between
# doing operations (that require deps) on different ports.
proc close_open_mports {} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach mport $macports::open_mports {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global macports::open_mports
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach mport $open_mports {
</span> catch {ditem_key $mport refcnt 1}
catch {mportclose $mport}
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set macports::open_mports [list]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set open_mports [list]
</span> }
proc install_dep_source {depinfo} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- incr ::build_counter
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set msg "Building dependency ($::build_counter of $::build_count) '[dict get $depinfo name]' with variants '[dict get $depinfo canonical_active_variants]'"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- puts -nonewline $::log_status_dependencies "$msg ... "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global build_counter build_count log_status_dependencies \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ mportinfo_array failcache_dir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ incr build_counter
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set msg "Building dependency ($build_counter of $build_count) '[dict get $depinfo name]' with variants '[dict get $depinfo canonical_active_variants]'"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts -nonewline $log_status_dependencies "$msg ... "
</span> puts "----> ${msg}"
# Be quiet during the prep operations
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -494,7 +504,7 @@ proc install_dep_source {depinfo} {
</span> set macports::channels(info) {}
close_open_mports
clean_workdirs
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set ::mportinfo_array [dict create]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set mportinfo_array [dict create]
</span> set ditem [lindex [open_port [dict get $depinfo name]] 0]
# Ensure archivefetch is not attempted at all
set workername [ditem_key $ditem workername]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -521,7 +531,7 @@ proc install_dep_source {depinfo} {
</span> }
if {$fail || $result > 0} {
puts stderr "Fetch of dependency '[dict get $depinfo name]' with variants '[dict get $depinfo canonical_active_variants]' failed, aborting."
<span style='display:block; white-space:pre;background:#ffe0e0;'>- puts $::log_status_dependencies {[FAIL] (fetch)}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts $log_status_dependencies {[FAIL] (fetch)}
</span> puts $::log_subports_progress "Building '$::portname' ... \[FAIL\] (failed to fetch dependency '[dict get $depinfo name]') maintainers: [get_maintainers $::portname [dict get $depinfo name]]."
exit 1
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -532,7 +542,7 @@ proc install_dep_source {depinfo} {
</span> }
if {$fail || $result > 0} {
puts stderr "Checksum of dependency '[dict get $depinfo name]' with variants '[dict get $depinfo canonical_active_variants]' failed, aborting."
<span style='display:block; white-space:pre;background:#ffe0e0;'>- puts $::log_status_dependencies {[FAIL] (checksum)}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts $log_status_dependencies {[FAIL] (checksum)}
</span> puts $::log_subports_progress "Building '$::portname' ... \[FAIL\] (failed to checksum dependency '[dict get $depinfo name]') maintainers: [get_maintainers $::portname [dict get $depinfo name]]."
exit 1
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -545,24 +555,24 @@ proc install_dep_source {depinfo} {
</span> }
if {$fail || $result > 0} {
puts stderr "Build of dependency '[dict get $depinfo name]' with variants '[dict get $depinfo canonical_active_variants]' failed, aborting."
<span style='display:block; white-space:pre;background:#ffe0e0;'>- puts $::log_status_dependencies {[FAIL]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts $log_status_dependencies {[FAIL]}
</span> puts $::log_subports_progress "Building '$::portname' ... \[FAIL\] (failed to install dependency '[dict get $depinfo name]') maintainers: [get_maintainers $::portname [dict get $depinfo name]]."
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {$::failcache_dir ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$failcache_dir ne ""} {
</span> failcache_update [dict get $depinfo name] [ditem_key $ditem porturl] [dict get $depinfo canonical_active_variants] 1
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- ui_debug "Open mports:"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach mport $macports::open_mports {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ui_debug [ditem_key $ditem]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ui_debug "Open mports:"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #foreach mport $macports::open_mports {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # ui_debug [ditem_key $ditem]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #}
</span> exit 1
}
# Success. Clear any failcache entry.
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {$::failcache_dir ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$failcache_dir ne ""} {
</span> failcache_update [dict get $depinfo name] [ditem_key $ditem porturl] [dict get $depinfo canonical_active_variants] 0
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- puts $::log_status_dependencies {[OK]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts $log_status_dependencies {[OK]}
</span> }
# Show all output for anything that gets installed
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -573,7 +583,7 @@ set missing_deps [list]
</span> try {
foreach ditem $dlist_sorted {
if {[install_dep_archive $ditem]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- lappend missing_deps [dict get $::mportinfo_array $ditem]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lappend missing_deps [dict get $mportinfo_array $ditem]
</span> }
}
} on error {eMessage} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -605,7 +615,7 @@ if {$build_count > 0} {
</span> set macports::channels(debug) {}
set macports::channels(info) {}
close_open_mports
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set ::mportinfo_array [dict create]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set mportinfo_array [dict create]
</span> try {
set mport [mportopen [dict get $portinfo porturl] [dict create subport $portname] $variants]
} on error {eMessage} {
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/tools/failcache.tcl b/tools/failcache.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 3585cb5..7d91387 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/tools/failcache.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/tools/failcache.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -25,13 +25,14 @@ proc port_files_checksum {porturl} {
</span> }
proc check_failcache {portname porturl canonical_variants {return_contents no}} {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ global failcache_dir
</span> set hash [port_files_checksum $porturl]
set key "$portname $canonical_variants $hash"
set ret 0
<span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach f [glob -directory $::failcache_dir -nocomplain -tails "${portname} *"] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach f [glob -directory $failcache_dir -nocomplain -tails "${portname} *"] {
</span> if {$f eq $key} {
if {$return_contents} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set fd [open [file join $::failcache_dir $f] r]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set fd [open [file join $failcache_dir $f] r]
</span> set line [gets $fd]
close $fd
return $line
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -39,22 +40,24 @@ proc check_failcache {portname porturl canonical_variants {return_contents no}}
</span> set ret 1
} elseif {[lindex [split $f " "] end] ne $hash} {
puts stderr "removing stale failcache entry: $f"
<span style='display:block; white-space:pre;background:#ffe0e0;'>- file delete -force [file join $::failcache_dir $f]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ file delete -force [file join $failcache_dir $f]
</span> }
}
return $ret
}
proc failcache_update {portname porturl canonical_variants failed} {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ global failcache_dir
</span> set hash [port_files_checksum $porturl]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set entry_path [file join $::failcache_dir "$portname $canonical_variants $hash"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set entry_path [file join $failcache_dir "$portname $canonical_variants $hash"]
</span> if {$failed} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- file mkdir $::failcache_dir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global env failcache_buildurl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ file mkdir $failcache_dir
</span> set fd [open $entry_path w]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists ::env(BUILDBOT_BUILDURL)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- puts $fd $::env(BUILDBOT_BUILDURL)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } elseif {[info exists ::failcache_buildurl]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- puts $fd $::failcache_buildurl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[info exists env(BUILDBOT_BUILDURL)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts $fd $env(BUILDBOT_BUILDURL)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } elseif {[info exists failcache_buildurl]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts $fd $failcache_buildurl
</span> } else {
puts $fd "unknown"
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -66,7 +69,8 @@ proc failcache_update {portname porturl canonical_variants failed} {
</span>
# clear all entries for portname
proc failcache_clear_all {portname} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach f [glob -directory $::failcache_dir -nocomplain "${portname} *"] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global failcache_dir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach f [glob -directory $failcache_dir -nocomplain "${portname} *"] {
</span> puts stderr "clearing failcache entry: [file tail $f]"
file delete -force $f
}
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/tools/mirror-multi.tcl b/tools/mirror-multi.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index b9a9c90..aa31bd6 100755
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/tools/mirror-multi.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/tools/mirror-multi.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -63,10 +63,12 @@ set mirror_done [dict create]
</span> set distfiles_results [dict create]
proc check_mirror_done {portname} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[dict exists $::mirror_done $portname]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return [dict get $::mirror_done $portname]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global mirror_done
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $mirror_done $portname]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return [dict get $mirror_done $portname]
</span> }
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set cache_entry [file join $::mirrorcache_dir [string toupper [string index $portname 0]] $portname]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global mirrorcache_dir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set cache_entry [file join $mirrorcache_dir [string toupper [string index $portname 0]] $portname]
</span> if {[file isfile $cache_entry]} {
set result [mportlookup $portname]
if {[llength $result] < 2} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -82,31 +84,33 @@ proc check_mirror_done {portname} {
</span> close $fd
if {$portfile_hash eq $entry_hash} {
if {$partial eq ""} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- dict set ::mirror_done $portname 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set mirror_done $portname 1
</span> return 1
} else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- dict set ::mirror_done $portname $partial
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set mirror_done $portname $partial
</span> return $partial
}
} else {
file delete -force $cache_entry
<span style='display:block; white-space:pre;background:#ffe0e0;'>- dict set ::mirror_done $portname 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set mirror_done $portname 0
</span> }
}
} else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- dict set ::mirror_done $portname 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set mirror_done $portname 0
</span> }
return 0
}
proc set_mirror_done {portname value} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {![dict exists $::mirror_done $portname] || [dict get $::mirror_done $portname] != 1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global mirror_done
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![dict exists $mirror_done $portname] || [dict get $mirror_done $portname] != 1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global mirrorcache_dir
</span> set result [mportlookup $portname]
set portinfo [lindex $result 1]
set portfile [file join [macports::getportdir [dict get $portinfo porturl]] Portfile]
set portfile_hash [sha256 file $portfile]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set cache_dir [file join $::mirrorcache_dir [string toupper [string index $portname 0]]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set cache_dir [file join $mirrorcache_dir [string toupper [string index $portname 0]]]
</span> file mkdir $cache_dir
set cache_entry [file join $cache_dir $portname]
set fd [open $cache_entry w]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -115,13 +119,14 @@ proc set_mirror_done {portname value} {
</span> puts $fd $value
}
close $fd
<span style='display:block; white-space:pre;background:#ffe0e0;'>- dict set ::mirror_done $portname 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set mirror_done $portname 1
</span> }
}
proc get_dep_list {portinfo} {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ global deptypes
</span> set deps [list]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach deptype $::deptypes {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach deptype $deptypes {
</span> if {[dict exists $portinfo $deptype]} {
foreach dep [dict get $portinfo $deptype] {
lappend deps [lindex [split $dep :] end]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -151,10 +156,11 @@ proc save_distfiles_results {mport succeeded} {
</span> # no distfiles, no problem
return
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ global distfiles_results
</span> set distpath [_mportkey $mport distpath]
foreach distfile $all_dist_files {
set filepath [file join $distpath $distfile]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- dict set ::distfiles_results $filepath $succeeded
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set distfiles_results $filepath $succeeded
</span> }
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -179,6 +185,7 @@ proc skip_mirror {mport identifier} {
</span> # no distfiles, no need to mirror
return 1
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ global distfiles_results
</span> if {![info exists distfiles]} {
set distfiles [list]
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -194,9 +201,9 @@ proc skip_mirror {mport identifier} {
</span> }
set distfile [getdistname $distfile]
set filepath [file join $distpath $distfile]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {![dict exists $::distfiles_results $filepath]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![dict exists $distfiles_results $filepath]} {
</span> set any_unmirrored 1
<span style='display:block; white-space:pre;background:#ffe0e0;'>- } elseif {[dict get $::distfiles_results $filepath] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } elseif {[dict get $distfiles_results $filepath] == 0} {
</span> ui_msg "Skipping ${identifier}: $distfile already failed checksum"
return 2
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -210,9 +217,10 @@ proc skip_mirror {mport identifier} {
</span>
proc mirror_port {portinfo} {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ global processed platforms
</span> set portname [dict get $portinfo name]
set porturl [dict get $portinfo porturl]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- dict set ::processed $portname 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set processed $portname 1
</span> set do_mirror 1
set attempted 0
set succeeded 0
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -269,7 +277,7 @@ proc mirror_port {portinfo} {
</span> mportclose $mport
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach {os_major os_arch} $::platforms {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach {os_major os_arch} $platforms {
</span> ui_msg "$portname with platform 'darwin $os_major $os_arch'"
if {[catch {mportopen $porturl [dict create subport $portname os_major $os_major os_arch $os_arch] {}} mport]} {
ui_error "mportopen $porturl failed: $mport"
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -295,7 +303,7 @@ proc mirror_port {portinfo} {
</span>
set dep_failed 0
foreach dep [lsort -unique $deps] {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {![dict exists $::processed $dep] && [check_mirror_done $dep] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![dict exists $processed $dep] && [check_mirror_done $dep] == 0} {
</span> set result [mportlookup $dep]
if {[llength $result] < 2} {
ui_error "No such port: $dep"
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -320,14 +328,14 @@ proc mirror_port {portinfo} {
</span> }
set mirrorcache_dir /tmp/mirrorcache
<span style='display:block; white-space:pre;background:#ffe0e0;'>-if {[lindex $::argv 0] eq "-c"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set mirrorcache_dir [lindex $::argv 1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set ::argv [lrange $::argv 2 end]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if {[lindex $argv 0] eq "-c"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set mirrorcache_dir [lindex $argv 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set argv [lrange $argv 2 end]
</span> }
set exitval 0
<span style='display:block; white-space:pre;background:#ffe0e0;'>-foreach portname $::argv {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[dict exists $::processed $portname]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+foreach portname $argv {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $processed $portname]} {
</span> ui_msg "skipping ${portname}, already processed"
continue
}
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/tools/sort-with-subports.tcl b/tools/sort-with-subports.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 4c8f37d..dd82d9d 100755
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/tools/sort-with-subports.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/tools/sort-with-subports.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -48,60 +48,63 @@ proc ui_channels {priority} {
</span>
proc process_port_deps {portname} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set deplist [dict get $::portdepinfo $portname]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- dict unset ::portdepinfo $portname
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[dict exists $::portsoftdeps $portname]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- lappend deplist {*}[dict get $::portsoftdeps $portname]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- dict unset ::portsoftdeps $portname
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global portdepinfo portsoftdeps portlist
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set deplist [dict get $portdepinfo $portname]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict unset portdepinfo $portname
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $portsoftdeps $portname]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lappend deplist {*}[dict get $portsoftdeps $portname]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict unset portsoftdeps $portname
</span> }
foreach portdep $deplist {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[dict exists $::portdepinfo $portdep]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $portdepinfo $portdep]} {
</span> process_port_deps $portdep
}
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- lappend ::portlist $portname
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lappend portlist $portname
</span> }
proc check_failing_deps {portname} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[dict exists $::failingports $portname]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return [dict get $::failingports $portname]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global failingports portdepinfo outputports requestedports \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ canonicalnames
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $failingports $portname]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return [dict get $failingports $portname]
</span> }
# Protect against dependency cycles
<span style='display:block; white-space:pre;background:#ffe0e0;'>- dict set ::failingports $portname [list 3 $portname]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach portdep [dict get $::portdepinfo $portname] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set failingports $portname [list 3 $portname]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach portdep [dict get $portdepinfo $portname] {
</span> set dep_ret [check_failing_deps $portdep]
# 0 = ok, 1 = known_fail, 2 = failcache, 3 = dep cycle
set status [lindex $dep_ret 0]
if {$status != 0} {
set failed_dep [lindex $dep_ret 1]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[dict get $::outputports $portname] == 1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict get $outputports $portname] == 1} {
</span> if {$status == 1} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[dict exists $::requestedports $portname]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- puts stderr "Excluding [dict get $::canonicalnames $portname] because its dependency '$failed_dep' is known to fail"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $requestedports $portname]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts stderr "Excluding [dict get $canonicalnames $portname] because its dependency '$failed_dep' is known to fail"
</span> }
<span style='display:block; white-space:pre;background:#ffe0e0;'>- dict set ::outputports $portname 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } elseif {$status == 2 && ![dict exists $::requestedports $portname]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set outputports $portname 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } elseif {$status == 2 && ![dict exists $requestedports $portname]} {
</span> # Exclude deps that will fail due to their own dep being in the failcache.
# But still output requested ports so the failure will be reported.
<span style='display:block; white-space:pre;background:#ffe0e0;'>- dict set ::outputports $portname 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set outputports $portname 0
</span> } elseif {$status == 3} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[dict exists $::requestedports $portname]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- puts stderr "Warning: [dict get $::canonicalnames $portname] appears to have a cyclic dependency involving '$portdep'"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $requestedports $portname]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts stderr "Warning: [dict get $canonicalnames $portname] appears to have a cyclic dependency involving '$portdep'"
</span> }
# Some cycles involving depends_test exist, which don't cause
# problems yet only because we don't run tests.
<span style='display:block; white-space:pre;background:#ffe0e0;'>- #dict set ::outputports $portname 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #dict set outputports $portname 0
</span> }
}
# keep processing other deps for now if there was a dep cycle
if {$status != 3} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- dict set ::failingports $portname [list $status $failed_dep]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return [dict get $::failingports $portname]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set failingports $portname [list $status $failed_dep]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return [dict get $failingports $portname]
</span> }
}
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- dict set ::failingports $portname [list 0 ""]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return [dict get $::failingports $portname]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set failingports $portname [list 0 ""]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return [dict get $failingports $portname]
</span> }
source [file join [file dirname [info script]] failcache.tcl]
<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 4cc052a..dc6595c 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;'>@@ -54,7 +54,7 @@ foreach source $macports::sources {
</span> set portinfo [read $fd $len]
# depends_test is not included because mpbb doesn't run `port test'
<span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach field [list depends_build depends_extract depends_fetch depends_lib depends_patch depends_run] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach field {depends_build depends_extract depends_fetch depends_lib depends_patch depends_run} {
</span> if {[dict exists $portinfo $field]} {
foreach dependency [dict get $portinfo $field] {
set lowercase_dependency_name [string tolower [lindex [split $dependency :] end]]
</pre><pre style='margin:0'>
</pre>