<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/71446eadeab198ed087cec6e70fadebef74d1c07">https://github.com/macports/macports-base/commit/71446eadeab198ed087cec6e70fadebef74d1c07</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new 71446eade Share cached variant_descriptions.conf
</span>71446eade is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 71446eadeab198ed087cec6e70fadebef74d1c07
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Fri Mar 8 05:51:41 2024 +1100

<span style='display:block; white-space:pre;color:#404040;'>    Share cached variant_descriptions.conf
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Instead of each Portfile interpreter loading the file, do it once at the
</span><span style='display:block; white-space:pre;color:#404040;'>    macports1.0 level and alias in a proc to query the cache.
</span>---
 src/macports1.0/macports.tcl | 67 ++++++++++++++++++++++++++++++++++++++++++++
 src/port1.0/portutil.tcl     | 65 ++++--------------------------------------
 2 files changed, 73 insertions(+), 59 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 48b61a879..cf03593b7 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;'>@@ -94,6 +94,7 @@ namespace eval macports {
</span>     variable ui_prefix {---> }
 
     variable tool_path_cache [dict create]
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    variable variant_descriptions [dict create]
</span> 
     variable getprotocol_re {(?x)([^:]+)://.+}
     variable file_porturl_re {^file://(.*)}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1661,6 +1662,9 @@ match macports.conf.default."
</span>         trace add variable macports::quick_index {read write} macports::load_quickindex
     }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    # load variant descriptions file on demand
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    trace add variable macports::default_variant_descriptions read macports::load_default_variant_descriptions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     if {![info exists ui_options(ports_no_old_index_warning)]} {
         set default_source_url [lindex $sources_default 0]
         if {[macports::getprotocol $default_source_url] eq "file" || [macports::getprotocol $default_source_url] eq "rsync"} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1852,6 +1856,8 @@ proc macports::worker_init {workername portpath porturl portbuildpath options va
</span> 
     # archive_sites.conf handling
     $workername alias get_archive_sites_conf_values macports::get_archive_sites_conf_values
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    # variant_descriptions.conf
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    $workername alias get_variant_description macports::get_variant_description
</span> 
     # compiler version cache
     $workername alias get_compiler_version macports::get_compiler_version
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -6156,6 +6162,67 @@ proc macports::get_tool_path {tool} {
</span>     return $toolpath
 }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# Load the global description file for a port tree
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# @param descfile path to the descriptions file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# @return A dict mapping variant names to descriptions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc macports::load_variant_desc_file {descfile} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set variant_descs [dict create]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[file exists $descfile]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_debug "Reading variant descriptions from $descfile"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[catch {set fd [open $descfile r]} err]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ui_warn "Could not open global variant description file: $err"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            return $variant_descs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set lineno 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        while {[gets $fd line] >= 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            incr lineno
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            lassign $line name desc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {$name ne "" && $desc ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                dict set variant_descs $name $desc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ui_warn "Invalid variant description in $descfile at line $lineno"
</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;'>+        close $fd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return $variant_descs
</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;'>+# deferred loading of variant_descriptions.conf from default source
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc macports::load_default_variant_descriptions {name1 name2 op} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    variable default_variant_descriptions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    trace remove variable default_variant_descriptions read macports::load_default_variant_descriptions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set descfile [getdefaultportresourcepath port1.0/variant_descriptions.conf]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set default_variant_descriptions [load_variant_desc_file $descfile]
</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;'>+# get global description for a variant (called from portfile interpreters)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# @param variant name of the variant
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# @param resourcepath dir to search for conf file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# @return description from descriptions file or an empty string
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc macports::get_variant_description {variant resourcepath} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    variable variant_descriptions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {![dict exists $variant_descriptions $resourcepath]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        variable default_variant_descriptions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {$resourcepath eq [getdefaultportresourcepath]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            dict set variant_descriptions $resourcepath $default_variant_descriptions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set descfile [file join $resourcepath port1.0/variant_descriptions.conf]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            dict set variant_descriptions $resourcepath [dict merge $default_variant_descriptions [load_variant_desc_file $descfile]]
</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;'>+    if {[dict exists $variant_descriptions $resourcepath $variant]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return [dict get $variant_descriptions $resourcepath $variant]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # read and cache archive_sites.conf (called from port1.0 code)
 proc macports::get_archive_sites_conf_values {} {
     variable archive_sites_conf_values
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portutil.tcl b/src/port1.0/portutil.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index e9b839a59..eb29be983 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portutil.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portutil.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -627,7 +627,12 @@ proc variant {args} {
</span> 
         # read global variant description, if none given
         if {$vdesc eq ""} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            set vdesc [variant_desc $variant_provides]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            global portresourcepath
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {![info exists portresourcepath]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                global porturl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set portresourcepath [getportresourcepath $porturl]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set vdesc [get_variant_description $variant_provides $portresourcepath]
</span>         }
 
         # Set description.
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -711,64 +716,6 @@ proc variant_exists {name} {
</span>     return 0
 }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Load the global description file for a port tree
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# @param descfile path to the descriptions file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc load_variant_desc_file {descfile} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    global variant_descs_global
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {![info exists variant_descs_global]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set variant_descs_global [dict create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {![dict exists $variant_descs_global $descfile] && [file exists $descfile]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        ui_debug "Reading variant descriptions from $descfile"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        dict set variant_descs_global $descfile [dict create]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[catch {set fd [open $descfile r]} err]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            ui_warn "Could not open global variant description file: $err"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set lineno 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        while {[gets $fd line] >= 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            incr lineno
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set name [lindex $line 0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            set desc [lindex $line 1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {$name ne "" && $desc ne "" && ![dict exists $variant_descs_global $descfile $name]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                dict set variant_descs_global $descfile $name $desc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                ui_warn "Invalid variant description in $descfile at line $lineno"
</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;'>-        close $fd
</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;'>-##
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Get description for a variant from global descriptions file
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# @param variant name
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# @return description from descriptions file or an empty string
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc variant_desc {variant} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    global variant_descs_global porturl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    set descfile [getportresourcepath $porturl "port1.0/variant_descriptions.conf" no]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    load_variant_desc_file $descfile
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[dict exists $variant_descs_global ${descfile} ${variant}]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return [dict get $variant_descs_global ${descfile} ${variant}]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set descfile [getdefaultportresourcepath "port1.0/variant_descriptions.conf"]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        load_variant_desc_file $descfile
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {[dict exists $variant_descs_global ${descfile} ${variant}]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            return [dict get $variant_descs_global ${descfile} ${variant}]
</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 ""
</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> # platform [<os> [<release>]] [<arch>]
 # Portfile level procedure to provide support for declaring platform-specifics
 # Basically, just a fancy 'if', so that Portfiles' platform declarations can
</pre><pre style='margin:0'>

</pre>