<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/a84fceac01d497c36ed6f9fce3e5f3d08894730b">https://github.com/macports/macports-base/commit/a84fceac01d497c36ed6f9fce3e5f3d08894730b</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit a84fceac01d497c36ed6f9fce3e5f3d08894730b
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Sun Feb 25 11:30:45 2024 +1100

<span style='display:block; white-space:pre;color:#404040;'>    Factor out cache saving and loading code
</span>---
 src/macports1.0/macports.tcl | 84 +++++++++++++++++++++++---------------------
 1 file changed, 44 insertions(+), 40 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 8978ef6cc..36512cbb8 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;'>@@ -467,6 +467,46 @@ proc macports::getoption {name} {
</span>     return [set $name]
 }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# Load a cache file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# filename: Name relative to ${portdbpath}/cache to load from
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Returns a dict created from the file contents if successful, or an
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# empty dict otherwise.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc macports::load_cache {filename} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    variable portdbpath
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set cachefd -1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    macports_try -pass_signal {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set cachefd [open ${portdbpath}/cache/${filename} r]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set cache [dict create {*}[gets $cachefd]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } on error {errorInfo} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set cache [dict create]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_debug "Error reading ${portdbpath}/cache/${filename}: $errorInfo"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } finally {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {$cachefd != -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            close $cachefd
</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 $cache
</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;'>+# Save a cache file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# filename: Name relative to ${portdbpath}/cache to save to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# cache: A dict containing the cache data
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc macports::save_cache {filename cache} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    variable portdbpath
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set cachefd -1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    macports_try -pass_signal {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        file mkdir ${portdbpath}/cache
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set cachefd [open ${portdbpath}/cache/${filename} w]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts $cachefd $cache
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } on error {errorInfo} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_debug "Error writing ${portdbpath}/cache/${filename}: $errorInfo"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } finally {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {$cachefd != -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            close $cachefd
</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;'>+
</span> # deferred and on-need extraction of xcodeversion and xcodebuildcmd.
 proc macports::setxcodeinfo {name1 name2 op} {
     variable xcodeversion; variable xcodebuildcmd
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -479,18 +519,7 @@ proc macports::setxcodeinfo {name1 name2 op} {
</span>     set xcodebuildcmd_overridden [info exists xcodebuildcmd]
 
     # First try the cache
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    macports_try -pass_signal {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set versfile -1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set versfile [open ${portdbpath}/cache/xcodeinfo r]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set xcodeinfo_cache [dict create {*}[gets $versfile]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } on error {errorInfo} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set xcodeinfo_cache [dict create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ui_debug "Error loading ${portdbpath}/cache/xcodeinfo: $errorInfo"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } finally {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {$versfile != -1} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            close $versfile
</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:#e0ffe0;'>+    set xcodeinfo_cache [load_cache xcodeinfo]
</span>     # Figure out which file to check to see if Xcode was updated
     if {[file extension [file dirname [file dirname $developer_dir]]] eq ".app"} {
         # New style, Developer dir inside Xcode.app
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -599,14 +628,7 @@ proc macports::setxcodeinfo {name1 name2 op} {
</span>         set xcodeinfo_cache [dict filter $xcodeinfo_cache script {filename info} {
             file isfile $filename
         }]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[catch {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            file mkdir ${portdbpath}/cache
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set versfile [open ${portdbpath}/cache/xcodeinfo w]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts $versfile $xcodeinfo_cache
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            close $versfile
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } result]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ui_debug "Error writing ${portdbpath}/cache/xcodeinfo: $result"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        save_cache xcodeinfo $xcodeinfo_cache
</span>     }
 }
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1639,14 +1661,7 @@ proc mportshutdown {} {
</span>             ui_debug "Error writing ${portdbpath}/pingtimes: $result"
         }
         if {[info exists compiler_version_cache]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[catch {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                file mkdir ${portdbpath}/cache
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set versfile [open ${portdbpath}/cache/compiler_versions w]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                puts $versfile $compiler_version_cache
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                close $versfile
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } result]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ui_debug "Error writing ${portdbpath}/cache/compiler_versions: $result"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            macports::save_cache compiler_versions $compiler_version_cache
</span>         }
     }
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -5986,18 +6001,7 @@ proc macports::get_compiler_version {compiler developer_dir} {
</span> 
     if {![info exists compiler_version_cache]} {
         variable xcodeversion; variable xcodecltversion; variable portdbpath
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        macports_try -pass_signal {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set versfile -1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set versfile [open ${portdbpath}/cache/compiler_versions r]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set compiler_version_cache [dict create {*}[gets $versfile]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } on error {errorInfo} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set compiler_version_cache [dict create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ui_debug "Error loading ${portdbpath}/cache/compiler_versions: $errorInfo"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        } finally {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {$versfile != -1} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                close $versfile
</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:#e0ffe0;'>+        set compiler_version_cache [load_cache compiler_versions]
</span>         # Invalidate if Xcode or CLT version changed
         if {([dict exists $compiler_version_cache xcodeversion]
                 && $xcodeversion ne [dict get $compiler_version_cache xcodeversion])
</pre><pre style='margin:0'>

</pre>