<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/49ca74e92ab9957c0c0dc07ea88ad18eb957336e">https://github.com/macports/macports-base/commit/49ca74e92ab9957c0c0dc07ea88ad18eb957336e</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 49ca74e92ab9957c0c0dc07ea88ad18eb957336e
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Sat Apr 6 19:26:18 2024 +1100

<span style='display:block; white-space:pre;color:#404040;'>    Cache macos_version
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Running sw_vers accounted for about half the time spent in mportinit.
</span>---
 src/macports1.0/macports.tcl | 55 ++++++++++++++++++++++++++++++++------------
 1 file changed, 40 insertions(+), 15 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 c1c8f4722..7c3f525c0 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;'>@@ -1048,26 +1048,11 @@ proc mportinit {{up_ui_options {}} {up_options {}} {up_variations {}}} {
</span>         if {[file isdirectory /System/Library/Frameworks/Carbon.framework]} {
             # macOS
             set os_subplatform macosx
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[file executable /usr/bin/sw_vers]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                macports_try -pass_signal {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    set macos_version [exec -ignorestderr /usr/bin/sw_vers -productVersion 2> /dev/null]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                } on error {eMessage} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    ui_debug "sw_vers exists but running it failed: $eMessage"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span>         } else {
             # PureDarwin
             set os_subplatform puredarwin
         }
     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[vercmp $macos_version 11] >= 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # Big Sur is apparently any 11.x version
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set macos_version_major [lindex [split $macos_version .] 0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set macos_version_major [join [lrange [split $macos_version .] 0 1] .]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # backward compatibility synonym
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set macosx_version $macos_version_major
</span> 
     # Check that the current platform is the one we were configured for, otherwise need to do migration
     if {($os_platform ne $macports::autoconf::os_platform) || ($os_platform eq "darwin" && $os_major != $macports::autoconf::os_major)} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1278,6 +1263,46 @@ Please edit sources.conf and change '$url' to '[string range $url 0 end-6]tarbal
</span>         }
     }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Get macOS version (done here because caches can't be used before portdbpath is known)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {$os_subplatform eq "macosx"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # load cached macOS version
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set macos_version_cache [macports::load_cache macos_version]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set checkfile /System/Library/CoreServices/SystemVersion.plist
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set checkfile_mtime [expr {[file isfile $checkfile] ? [file mtime $checkfile] : {}}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[dict exists $macos_version_cache macos_version]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                && [dict exists $macos_version_cache mtime]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                && $checkfile_mtime == [dict get $macos_version_cache mtime]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set macos_version [dict get $macos_version_cache macos_version]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        } elseif {[file executable /usr/bin/sw_vers]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ui_debug "Refreshing cached macOS version"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set macos_version_cache [dict create]
</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 macos_version [exec -ignorestderr /usr/bin/sw_vers -productVersion 2> /dev/null]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                # Only update cache if it can be written out
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {$checkfile_mtime ne {} && [file writable $portdbpath]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    dict set macos_version_cache mtime $checkfile_mtime
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    dict set macos_version_cache macos_version $macos_version
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } on error {eMessage} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ui_debug "sw_vers exists but running it failed: $eMessage"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[dict exists $macos_version_cache macos_version]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 && [dict exists $macos_version_cache mtime]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                macports::save_cache macos_version $macos_version_cache
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ui_debug "sw_vers executable not found; can't get macOS version"
</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;'>+    if {[vercmp $macos_version 11] >= 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # Big Sur is apparently any 11.x version
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set macos_version_major [lindex [split $macos_version .] 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set macos_version_major [join [lrange [split $macos_version .] 0 1] .]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # backward compatibility synonym
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set macosx_version $macos_version_major
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     set env(HOME) [file join $portdbpath home]
     set registry.path $portdbpath
 
</pre><pre style='margin:0'>

</pre>