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