<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/b88744777d3bd3041c469540cf8bbadc0c85492b">https://github.com/macports/mpbb/commit/b88744777d3bd3041c469540cf8bbadc0c85492b</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit b88744777d3bd3041c469540cf8bbadc0c85492b
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Mon Mar 12 00:34:15 2018 +1100
<span style='display:block; white-space:pre;color:#404040;'> Lower the bar for recording mirror success
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Consider a port mirrored if any of its variants and platforms
</span><span style='display:block; white-space:pre;color:#404040;'> succeeded. Still re-mirror ports that are explicitly specified on the
</span><span style='display:block; white-space:pre;color:#404040;'> command line if they did not completely succeed previously, so
</span><span style='display:block; white-space:pre;color:#404040;'> mirroring can be forced.
</span>---
tools/mirror-multi.tcl | 61 +++++++++++++++++++++++++++++++++-----------------
1 file changed, 41 insertions(+), 20 deletions(-)
<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 7b838f1..d7ccd47 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;'>@@ -69,10 +69,16 @@ proc check_mirror_done {portname} {
</span> set portfile_hash [sha256 file $portfile]
set fd [open $cache_entry]
set entry_hash [gets $fd]
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ set partial [gets $fd]
</span> close $fd
if {$portfile_hash eq $entry_hash} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set mirror_done($portname) 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$partial eq ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set mirror_done($portname) 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set mirror_done($portname) $partial
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return $partial
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span> } else {
file delete -force $cache_entry
set mirror_done($portname) 0
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -84,9 +90,9 @@ proc check_mirror_done {portname} {
</span> return 0
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-proc set_mirror_done {portname} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc set_mirror_done {portname value} {
</span> global mirror_done mirrorcache_dir
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {![info exists mirror_done($portname)] || $mirror_done($portname) == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![info exists mirror_done($portname)] || $mirror_done($portname) != 1} {
</span> set result [mportlookup $portname]
array unset portinfo
array set portinfo [lindex $result 1]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -98,6 +104,9 @@ proc set_mirror_done {portname} {
</span> set cache_entry [file join $cache_dir $portname]
set fd [open $cache_entry w]
puts $fd $portfile_hash
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$value != 1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts $fd $value
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span> close $fd
set mirror_done($portname) 1
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -142,6 +151,8 @@ proc mirror_port {portinfo_list} {
</span> set porturl $portinfo(porturl)
set processed($portname) 1
set do_mirror 1
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ set attempted 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set succeeded 0
</span> if {[lsearch -exact -nocase $portinfo(license) "nomirror"] >= 0} {
ui_msg "Not mirroring $portname due to license"
set do_mirror 0
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -152,13 +163,13 @@ proc mirror_port {portinfo_list} {
</span> }
array unset portinfo
array set portinfo [mportinfo $mport]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set any_failed 0
</span> # have to checksum too since the mirror target claims to succeed
# even if the checksums were wrong and the files deleted
if {$do_mirror} {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ incr attempted
</span> mportexec $mport clean
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[mportexec $mport mirror] != 0 || [mportexec $mport checksum] != 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set any_failed 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[mportexec $mport mirror] == 0 && [mportexec $mport checksum] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ incr succeeded
</span> }
}
mportclose $mport
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -168,9 +179,9 @@ proc mirror_port {portinfo_list} {
</span>
foreach variant $variants {
ui_msg "$portname +${variant}"
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ incr attempted
</span> if {[catch {mportopen $porturl [list subport $portname] [list $variant +]} mport]} {
ui_error "mportopen $porturl failed: $mport"
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set any_failed 1
</span> continue
}
array unset portinfo
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -178,18 +189,20 @@ proc mirror_port {portinfo_list} {
</span> lappend deps {*}[get_dep_list portinfo]
if {$do_mirror} {
mportexec $mport clean
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[mportexec $mport mirror] != 0 || [mportexec $mport checksum] != 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set any_failed 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[mportexec $mport mirror] == 0 && [mportexec $mport checksum] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ incr succeeded
</span> }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ incr succeeded
</span> }
mportclose $mport
}
foreach {os_major os_arch} $platforms {
ui_msg "$portname with platform 'darwin $os_major $os_arch'"
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ incr attempted
</span> if {[catch {mportopen $porturl [list 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:#ffe0e0;'>- set any_failed 1
</span> continue
}
array unset portinfo
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -197,31 +210,39 @@ proc mirror_port {portinfo_list} {
</span> lappend deps {*}[get_dep_list portinfo]
if {$do_mirror} {
mportexec $mport clean
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[mportexec $mport mirror] != 0 || [mportexec $mport checksum] != 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set any_failed 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[mportexec $mport mirror] == 0 && [mportexec $mport checksum] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ incr succeeded
</span> }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ incr succeeded
</span> }
mportclose $mport
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ set dep_failed 0
</span> foreach dep [lsort -unique $deps] {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {![info exists processed($dep)] && ![check_mirror_done $dep]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![info 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:#ffe0e0;'>- set any_failed 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set dep_failed 1
</span> continue
}
if {[mirror_port [lindex $result 1]] != 0} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set any_failed 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set dep_failed 1
</span> }
}
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {$any_failed == 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set_mirror_done $portname
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$dep_failed == 0 && $succeeded > 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$succeeded == $attempted} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set_mirror_done $portname 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set_mirror_done $portname 0.5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0
</span> }
<span style='display:block; white-space:pre;background:#ffe0e0;'>- return $any_failed
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 1
</span> }
set mirrorcache_dir /tmp/mirrorcache
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -236,7 +257,7 @@ foreach portname $::argv {
</span> ui_msg "skipping ${portname}, already processed"
continue
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[check_mirror_done $portname]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[check_mirror_done $portname] == 1} {
</span> ui_msg "skipping ${portname}, previously mirrored"
continue
}
</pre><pre style='margin:0'>
</pre>