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