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