<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/9af7c6e365c802868ba675678e7c4e5619327104">https://github.com/macports/mpbb/commit/9af7c6e365c802868ba675678e7c4e5619327104</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 9af7c6e365c802868ba675678e7c4e5619327104
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Sat Jan 1 06:18:26 2022 +1100

<span style='display:block; white-space:pre;color:#404040;'>    Split out failcache handling into its own file
</span>---
 tools/failcache.tcl          | 58 ++++++++++++++++++++++++++++++++++++++++++++
 tools/sort-with-subports.tcl | 33 +------------------------
 2 files changed, 59 insertions(+), 32 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/tools/failcache.tcl b/tools/failcache.tcl
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..abd7290
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/tools/failcache.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,58 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# common code for operating on the failcache
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+package require sha256
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# slightly odd method as per mpbb's compute_failcache_hash
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc port_files_checksum {porturl} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set portdir [macports::getportdir $porturl]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    lappend hashlist [::sha2::sha256 -hex -file ${portdir}/Portfile]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[file exists ${portdir}/files]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        fs-traverse f [list ${portdir}/files] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[file type $f] eq "file"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                lappend hashlist [::sha2::sha256 -hex -file $f]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    foreach hash [lsort $hashlist] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        append compound_hash "${hash}\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return [::sha2::sha256 -hex $compound_hash]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc check_failcache {portname porturl canonical_variants {return_contents no}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set hash [port_files_checksum $porturl]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set key "$portname $canonical_variants $hash"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set ret 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    foreach f [glob -directory $::failcache_dir -nocomplain -tails "${portname} *"] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {$f eq $key} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {$return_contents} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set fd [open [file join $::failcache_dir $f] r]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set line [gets $fd]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                close $fd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                return $line
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set ret 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        } elseif {[lindex [split $f " "] end] ne $hash} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            puts stderr "removing stale failcache entry: $f"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            file delete -force [file join $::failcache_dir $f]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return $ret
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc failcache_update {portname porturl canonical_variants failed} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set hash [port_files_checksum $porturl]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set entry_path [file join $::failcache_dir "$portname $canonical_variants $hash"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {$failed} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        file mkdir $::failcache_dir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set fd [open $entry_path w]
</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;'>+        } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            puts $fd "unknown"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        close $fd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        file delete -force $entry_path
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><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 267e800..edd4e22 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;'>@@ -35,7 +35,6 @@
</span> 
 package require macports
 package require fetch_common
<span style='display:block; white-space:pre;background:#ffe0e0;'>-package require sha256
</span> 
 
 proc ui_prefix {priority} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -105,37 +104,7 @@ proc check_failing_deps {portname} {
</span>     return $::failingports($portname)
 }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# slightly odd method as per mpbb's compute_failcache_hash
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc port_files_checksum {porturl} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set portdir [macports::getportdir $porturl]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    lappend hashlist [::sha2::sha256 -hex -file ${portdir}/Portfile]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[file exists ${portdir}/files]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        fs-traverse f [list ${portdir}/files] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[file type $f] eq "file"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                lappend hashlist [::sha2::sha256 -hex -file $f]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    foreach hash [lsort $hashlist] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        append compound_hash "${hash}\n"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return [::sha2::sha256 -hex $compound_hash]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc check_failcache {portname porturl canonical_variants} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set hash [port_files_checksum $porturl]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set key "$portname $canonical_variants $hash"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set ret 0
</span><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:#ffe0e0;'>-        if {$f eq $key} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set ret 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } elseif {[lindex [split $f " "] end] ne $hash} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts stderr "removing stale failcache entry: $f"
</span><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:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return $ret
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+source [file join [file dirname [info script]] failcache.tcl]
</span> 
 if {[catch {mportinit "" "" ""} result]} {
    puts stderr "$errorInfo"
</pre><pre style='margin:0'>

</pre>