<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/a00ca9efdced7511d80b149a91e358ae6bfcd115">https://github.com/macports/macports-base/commit/a00ca9efdced7511d80b149a91e358ae6bfcd115</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit a00ca9efdced7511d80b149a91e358ae6bfcd115
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Sun Feb 18 01:24:14 2024 +1100
<span style='display:block; white-space:pre;color:#404040;'> portutil: use dict for vinfo etc
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Also use fully qualified names for infrequently used globals.
</span>---
src/port1.0/portutil.tcl | 180 ++++++++++++++++------------------------
src/port1.0/tests/portutil.test | 29 ++++---
2 files changed, 87 insertions(+), 122 deletions(-)
<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 68fcd79bf..75c79004b 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;'>@@ -86,9 +86,9 @@ proc exists {option} {
</span> # @param option name of the option
# @param args arguments
proc handle_option {option args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- global $option user_options
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global $option
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {![info exists user_options($option)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![info exists ::user_options($option)]} {
</span> set $option $args
}
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -99,9 +99,9 @@ proc handle_option {option args} {
</span> # @param option name of the option
# @param args arguments
proc handle_option-append {option args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- global $option user_options
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global $option
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {![info exists user_options($option)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![info exists ::user_options($option)]} {
</span> lappend $option {*}$args
}
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -112,9 +112,9 @@ proc handle_option-append {option args} {
</span> # @param option name of the option
# @param args arguments
proc handle_option-prepend {option args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- global $option user_options
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global $option
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {![info exists user_options($option)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![info exists ::user_options($option)]} {
</span> if {[info exists $option]} {
set $option [concat $args [set $option]]
} else {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -129,9 +129,9 @@ proc handle_option-prepend {option args} {
</span> # @param option name of the option
# @param args arguments
proc handle_option-delete {option args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- global $option user_options
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global $option
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {![info exists user_options($option)] && [info exists $option]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![info exists ::user_options($option)] && [info exists $option]} {
</span> foreach val $args {
set $option [ldelete [set $option][set $option {}] $val]
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -144,9 +144,9 @@ proc handle_option-delete {option args} {
</span> # @param option name of the option
# @param args arguments
proc handle_option-strsed {option args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- global $option user_options
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global $option
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {![info exists user_options($option)] && [info exists $option]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![info exists ::user_options($option)] && [info exists $option]} {
</span> foreach val $args {
set $option [strsed [set $option][set $option {}] $val]
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -159,9 +159,9 @@ proc handle_option-strsed {option args} {
</span> # @param option name of the option
# @param args arguments
proc handle_option-replace {option args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- global $option user_options
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global $option
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {![info exists user_options($option)] && [info exists $option]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![info exists ::user_options($option)] && [info exists $option]} {
</span> foreach {old new} $args {
set index [lsearch -exact [set $option] $old]
if {$index != -1} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -258,9 +258,8 @@ proc get_deprecated_options {} {
</span> # @param option name of the option
# @param newoption name of a superseding option
proc option_deprecate {option {newoption ""} } {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- global deprecated_options
</span> # If a new option is specified, default the option to $newoption
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set deprecated_options($option) [list $newoption 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ::deprecated_options($option) [list $newoption 0]
</span> # Create a normal option for compatibility
options $option
# Register a proc for handling the deprecation
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -452,7 +451,7 @@ proc command_exec {args} {
</span> # Call this command.
# TODO: move that to the system native call?
# Save the environment.
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array set saved_env [array get env]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set saved_env [array get env]
</span> # Set the overridden variables from the portfile.
array set env [array get ${varprefix}.env_array]
# Call the command.
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -468,7 +467,7 @@ proc command_exec {args} {
</span>
# Restore the environment.
array unset env *
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array set env [array get saved_env]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ array set env $saved_env
</span>
# Return as if system had been called directly.
return -code $code -errorcode $errcode -errorinfo $errinfo $result
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -562,7 +561,7 @@ proc handle_option_string {option action args} {
</span> # variant <provides> [<provides> ...] [requires <requires> [<requires>]]
# Portfile level procedure to provide support for declaring variants
proc variant {args} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- global all_variants PortInfo porturl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global PortInfo
</span>
# Each key in PortInfo(vinfo) maps to an array which contains the
# following keys:
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -571,9 +570,8 @@ proc variant {args} {
</span> # * is_default: This key exists iff the variant is a default variant.
# * requires
if {![info exists PortInfo(vinfo)]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set PortInfo(vinfo) [list]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set PortInfo(vinfo) [dict create]
</span> }
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array set vinfo $PortInfo(vinfo)
</span>
set len [llength $args]
if {$len < 2} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -618,16 +616,11 @@ proc variant {args} {
</span> # This variant was already defined. Remove it from the dlist.
variant_remove_ditem $variant_provides
} else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- # Create an array to contain the variant's information.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {![info exists vinfo($variant_provides)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set vinfo($variant_provides) [list]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- array set variant $vinfo($variant_provides)
</span>
# Set conflicts.
set vconflicts [join [lsort [ditem_key $ditem conflicts]]]
if {$vconflicts ne ""} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array set variant [list conflicts $vconflicts]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set PortInfo(vinfo) $variant_provides conflicts $vconflicts
</span> }
lappend PortInfo(variants) $variant_provides
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -635,25 +628,21 @@ 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 $porturl $variant_provides]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set vdesc [variant_desc $::porturl $variant_provides]
</span> }
# Set description.
if {$vdesc ne ""} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array set variant [list description $vdesc]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set PortInfo(vinfo) $variant_provides description $vdesc
</span> }
# Set requires.
set vrequires [join [lsort [ditem_key $ditem requires]]]
if {$vrequires ne ""} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array set variant [list requires $vrequires]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set PortInfo(vinfo) $variant_provides requires $vrequires
</span> }
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- # Add the variant (back) to PortInfo(vinfo).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- array set vinfo [list $variant_provides [array get variant]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set PortInfo(vinfo) [array get vinfo]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> if {[variant_isset $variant_provides]} {
# set variants that this one requires
foreach req [ditem_key $ditem requires] {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -662,15 +651,13 @@ proc variant {args} {
</span> }
# Finally append the ditem to the dlist.
<span style='display:block; white-space:pre;background:#ffe0e0;'>- lappend all_variants $ditem
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lappend ::all_variants $ditem
</span> }
# variant_isset name
# Returns 1 if variant name selected, otherwise 0
proc variant_isset {name} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- global variations
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists variations($name)] && $variations($name) eq "+"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[info exists ::variations($name)] && $::variations($name) eq "+"} {
</span> return 1
}
return 0
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -679,8 +666,7 @@ proc variant_isset {name} {
</span> # variant_set name
# Sets variant to run for current portfile
proc variant_set {name} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- global variations
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set variations($name) +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ::variations($name) +
</span> }
# variant_remove_ditem name
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -707,17 +693,14 @@ proc variant_delete {name} {
</span> set ::PortInfo(variants) [ldelete $::PortInfo(variants) $name]
}
if {[info exists ::PortInfo(vinfo)]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array set vinfo $::PortInfo(vinfo)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- unset -nocomplain vinfo($name)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set ::PortInfo(vinfo) [array get vinfo]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict unset ::PortInfo(vinfo) $name
</span> }
}
# variant_exists name
# determine if a variant exists.
proc variant_exists {name} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- global PortInfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists PortInfo(variants)] && $name in $PortInfo(variants)} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[info exists ::PortInfo(variants)] && $name in $::PortInfo(variants)} {
</span> return 1
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -731,29 +714,29 @@ proc variant_exists {name} {
</span> proc load_variant_desc_file {descfile} {
global variant_descs_global
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {![info exists variant_descs_global($descfile)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set variant_descs_global($descfile) yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[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:#e0ffe0;'>+ if {![info exists variant_descs_global]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set variant_descs_global [dict create]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![dict exists $variant_descs_global $descfile] && [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:#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 ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 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:#e0ffe0;'>+ dict set variant_descs_global $descfile [dict create]
</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
</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;'>+ set name [lindex $line 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set desc [lindex $line 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$name ne "" && $desc ne "" && ![dict exists $variant_descs_global $descfile $name]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set variant_descs_global $descfile $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:#ffe0e0;'>- close $fd
</span> }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ close $fd
</span> }
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -769,14 +752,14 @@ proc variant_desc {porturl variant} {
</span> set descfile [getportresourcepath $porturl "port1.0/variant_descriptions.conf" no]
load_variant_desc_file $descfile
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists variant_descs_global(${descfile}_${variant})]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return $variant_descs_global(${descfile}_${variant})
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $variant_descs_global ${descfile} ${variant}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return [dict get $variant_descs_global ${descfile} ${variant}]
</span> } else {
set descfile [getdefaultportresourcepath "port1.0/variant_descriptions.conf"]
load_variant_desc_file $descfile
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists variant_descs_global(${descfile}_${variant})]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return $variant_descs_global(${descfile}_${variant})
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $variant_descs_global ${descfile} ${variant}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return [dict get $variant_descs_global ${descfile} ${variant}]
</span> }
return ""
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1972,7 +1955,7 @@ proc check_statefile_variants {variations oldvariations fd} {
</span> upvar $variations upvariations
upvar $oldvariations upoldvariations
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array set upoldvariations {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set upoldvariations [dict create]
</span>
set variants_found no
set targets_found no
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1981,7 +1964,7 @@ proc check_statefile_variants {variations oldvariations fd} {
</span> seek $fd 0
while {[gets $fd line] >= 0} {
if {[regexp $variant_re $line match name]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set upoldvariations([string range $name 1 end]) [string range $name 0 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set upoldvariations [string range $name 1 end] [string range $name 0 0]
</span> set variants_found yes
}
if {[regexp $target_re $line]} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1995,11 +1978,11 @@ proc check_statefile_variants {variations oldvariations fd} {
</span> }
set mismatch 0
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[array size upoldvariations] != [array size upvariations]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict size $upoldvariations] != [dict size $upvariations]} {
</span> set mismatch 1
} else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach key [array names upvariations *] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {![info exists upoldvariations($key)] || $upvariations($key) ne $upoldvariations($key)} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict for {key val} $upvariations {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![dict exists $upoldvariations $key] || $val ne [dict get $upoldvariations $key]} {
</span> set mismatch 1
break
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2075,11 +2058,10 @@ proc variant_run {ditem} {
</span> # variants in a string in a standard order as +var1+var2 etc.
# Can also do the same for -variants, for recording the negated list.
proc canonicalize_variants {variants {sign "+"}} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array set vara $variants
</span> set result ""
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set vlist [lsort -ascii [array names vara]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set vlist [lsort -ascii [dict keys $variants]]
</span> foreach v $vlist {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {$vara($v) eq $sign} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict get $variants $v] eq $sign} {
</span> append result "${sign}${v}"
}
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2087,12 +2069,10 @@ proc canonicalize_variants {variants {sign "+"}} {
</span> }
proc eval_variants {variations} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- global all_variants PortInfo requested_variations portvariants requested_variants
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set dlist $all_variants
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global PortInfo requested_variations portvariants
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set dlist $::all_variants
</span> upvar $variations upvariations
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set chosen [choose_variants $dlist upvariations]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set negated [lindex $chosen 1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set chosen [lindex $chosen 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lassign [choose_variants $dlist upvariations] chosen negated
</span> set portname [option subport]
# Check to make sure the requested variations are available with this
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2168,7 +2148,7 @@ proc eval_variants {variations} {
</span> lappend negated_list $thevar "-"
}
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set requested_variants [canonicalize_variants $requested_list "+"][canonicalize_variants $negated_list "-"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ::requested_variants [canonicalize_variants $requested_list "+"][canonicalize_variants $negated_list "-"]
</span>
return 0
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2176,7 +2156,7 @@ proc eval_variants {variations} {
</span> proc check_variants {target} {
global targets ports_force ports_dryrun PortInfo
set result 0
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array set variations $PortInfo(active_variants)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set variations $PortInfo(active_variants)
</span>
# Make sure the variations match those stored in the statefile.
# If they don't match, print an error indicating a 'port clean'
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2202,15 +2182,14 @@ proc check_variants {target} {
</span>
set state_fd [open_statefile]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array set oldvariations {}
</span> if {![tbool ports_force] && [check_statefile_variants variations oldvariations $state_fd]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- ui_error "Requested variants \"[canonicalize_variants [array get variations]]\" do not match those the build was started with: \"[canonicalize_variants [array get oldvariations]]\"."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_error "Requested variants \"[canonicalize_variants $variations]\" do not match those the build was started with: \"[canonicalize_variants $oldvariations]\"."
</span> ui_error "Please use the same variants again, or run 'port clean [option subport]' first to remove the existing partially completed build."
set result 1
} elseif {![tbool ports_dryrun]} {
# Write variations out to the statefile
<span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach key [array names variations *] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- write_statefile variant $variations($key)$key $state_fd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict for {key val} $variations {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ write_statefile variant ${val}${key} $state_fd
</span> }
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2249,13 +2228,12 @@ proc universal_setup {args} {
</span>
# constructor for target object
proc target_new {name procedure} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- global targets
</span> set ditem [ditem_create]
ditem_key $ditem name $name
ditem_key $ditem procedure $procedure
<span style='display:block; white-space:pre;background:#ffe0e0;'>- lappend targets $ditem
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lappend ::targets $ditem
</span>
return $ditem
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2357,33 +2335,21 @@ proc variant_new {name} {
</span>
proc handle_default_variants {option action {value ""}} {
global PortInfo variations
<span style='display:block; white-space:pre;background:#ffe0e0;'>- switch -regex $action {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set|append {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # Retrieve the information associated with each variant.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {![info exists PortInfo(vinfo)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set PortInfo(vinfo) [list]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- array set vinfo $PortInfo(vinfo)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ switch $action {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ append -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Parse each value as a variant name and sign.
</span> set re {([-+])([-A-Za-z0-9_.]+)}
foreach v $value {
if {[regexp $re $v whole val variant]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- # Retrieve the information associated with this variant.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {![info exists vinfo($variant)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set vinfo($variant) {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- array unset info
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- array set info $vinfo($variant)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # Set is_default and update vinfo.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set info(is_default) $val
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- array set vinfo [list $variant [array get info]]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Set is_default in the associated vinfo.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set PortInfo(vinfo) $variant is_default $val
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Add the default value to variations if not already set
</span> if {![info exists variations($variant)]} {
set variations($variant) $val
}
}
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- # Update PortInfo(vinfo).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set PortInfo(vinfo) [array get vinfo]
</span> }
delete {
# xxx
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/tests/portutil.test b/src/port1.0/tests/portutil.test
</span><span style='display:block; white-space:pre;color:#808080;'>index fce070a75..8af7883a9 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/tests/portutil.test
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/tests/portutil.test
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -589,27 +589,25 @@ test write_statefile {
</span> test check_statefile_variants {
Check statefile unit test.
} -setup {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array set variations {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- target org.macports.fetch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- target org.macports.checksum
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- array set oldvariations {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- target org.macports.fetch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- target org.macports.checksum
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- array set oldvariations_fail {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- target org.macports.patch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set fd [open $pwd/statefile r]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set variations [dict create \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foo + \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bar + \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set fd [open $pwd/test.statefile w+]
</span>
} -body {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ write_statefile variant +foo $fd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ write_statefile variant +bar $fd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set res [check_statefile_variants variations oldvariations $fd]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$res != 0} {return "FAIL: non-matching variants: $oldvariations"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ write_statefile variant +extra $fd
</span> set res [check_statefile_variants variations oldvariations $fd]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {$res != 0} {return "FAIL: invalid variant"}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set res [check_statefile_variants variations oldvariations_fail $fd]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {$res != 1} {return "FAIL: invalid variant"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$res != 1} {return "FAIL: unexpectedly matching variants: $oldvariations"}
</span> close $fd
return "Check statefile successful."
<span style='display:block; white-space:pre;background:#e0ffe0;'>+} -cleanup {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ file delete -force $pwd/test.statefile
</span> } -result "Check statefile successful."
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -617,6 +615,7 @@ test choose_variants {
</span> Choose variants unit test.
} -setup {
init_eval_targets
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ unset -nocomplain variations
</span> array set variations { fondu + }
array set variations_neg { fondu - }
array set variations_not { fondu a }
</pre><pre style='margin:0'>
</pre>