<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/707792aab55b041d2adcedd6ea893114ee784dbe">https://github.com/macports/macports-base/commit/707792aab55b041d2adcedd6ea893114ee784dbe</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 707792aab55b041d2adcedd6ea893114ee784dbe
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Wed Feb 14 22:25:43 2024 +1100
<span style='display:block; white-space:pre;color:#404040;'> portimage: use dict for options, portinfo, precious_dirs
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Also use a list for todeactivate since it's only ever iterated through,
</span><span style='display:block; white-space:pre;color:#404040;'> and use fully qualified names for infrequently used globals.
</span>---
src/registry2.0/portimage.tcl | 66 +++++++++++++++++++------------------------
1 file changed, 29 insertions(+), 37 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/registry2.0/portimage.tcl b/src/registry2.0/portimage.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 7a1cbbed5..641ebae62 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/registry2.0/portimage.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/registry2.0/portimage.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -76,25 +76,23 @@ proc activate_composite {name {v ""} {optionslist ""}} {
</span> }
# Activate a "Port Image"
<span style='display:block; white-space:pre;background:#ffe0e0;'>-proc activate {name {version ""} {revision ""} {variants 0} {optionslist ""}} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global macports::registry.path registry_open UI_PREFIX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- array set options $optionslist
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc activate {name {version ""} {revision ""} {variants 0} {options ""}} {
</span> variable force
variable noexec
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists options(ports_force)] && [string is true -strict $options(ports_force)] } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $options ports_force] && [string is true -strict [dict get $options ports_force]] } {
</span> set force 1
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists options(ports_activate_no-exec)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set noexec $options(ports_activate_no-exec)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $options ports_activate_no-exec]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set noexec [dict get $options ports_activate_no-exec]
</span> }
set rename_list [list]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists options(portactivate_rename_files)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set rename_list $options(portactivate_rename_files)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $options portactivate_rename_files]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rename_list [dict get $options portactivate_rename_files]
</span> }
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {![info exists registry_open]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- registry::open [::file join ${macports::registry.path} registry registry.db]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set registry_open yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![info exists ::registry_open]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ registry::open [::file join ${::macports::registry.path} registry registry.db]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ::registry_open yes
</span> }
set todeactivate [list]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -143,7 +141,7 @@ proc activate {name {version ""} {revision ""} {variants 0} {optionslist ""}} {
</span> }
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- ui_msg "$UI_PREFIX [format [msgcat::mc "Activating %s @%s"] $name $specifier]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_msg "$::UI_PREFIX [format [msgcat::mc "Activating %s @%s"] $name $specifier]"
</span>
_activate_contents $requested $rename_list
} finally {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -165,11 +163,9 @@ proc deactivate_composite {name {v ""} {optionslist ""}} {
</span> throw registry::invalid "Registry error: Invalid version '$v' specified for ${name}. Please specify a version as recorded in the port registry."
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-proc deactivate {name {version ""} {revision ""} {variants 0} {optionslist ""}} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global UI_PREFIX macports::registry.path registry_open
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- array set options $optionslist
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc deactivate {name {version ""} {revision ""} {variants 0} {options ""}} {
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists options(ports_force)] && [string is true -strict $options(ports_force)] } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $options ports_force] && [string is true -strict [dict get $options ports_force]] } {
</span> # this not using the namespace variable is correct, since activate
# needs to be able to force deactivate independently of whether
# the activation is being forced
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -177,9 +173,9 @@ proc deactivate {name {version ""} {revision ""} {variants 0} {optionslist ""}}
</span> } else {
set force 0
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {![info exists registry_open]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- registry::open [::file join ${macports::registry.path} registry registry.db]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set registry_open yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![info exists ::registry_open]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ registry::open [::file join ${::macports::registry.path} registry registry.db]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ::registry_open yes
</span> }
if {$name eq ""} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -250,7 +246,7 @@ proc deactivate {name {version ""} {revision ""} {variants 0} {optionslist ""}}
</span> return -code error "Image error: ${name} @${specifier} is not active."
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {![info exists options(ports_nodepcheck)] || ![string is true -strict $options(ports_nodepcheck)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![dict exists $options ports_nodepcheck] || ![string is true -strict [dict get $options ports_nodepcheck]]} {
</span> set retvalue [registry::check_dependents $requested $force "deactivate"]
if {$retvalue eq "quit"} {
#registry::entry close $requested
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -258,7 +254,7 @@ proc deactivate {name {version ""} {revision ""} {variants 0} {optionslist ""}}
</span> }
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- ui_msg "$UI_PREFIX [format [msgcat::mc "Deactivating %s @%s"] $name $specifier]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_msg "$::UI_PREFIX [format [msgcat::mc "Deactivating %s @%s"] $name $specifier]"
</span>
try {
_deactivate_contents $requested [$requested files] $force
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -268,7 +264,6 @@ proc deactivate {name {version ""} {revision ""} {variants 0} {optionslist ""}}
</span> }
proc _check_registry {name version revision variants {return_all 0}} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- global UI_PREFIX
</span>
set searchkeys $name
set composite_spec ""
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -291,7 +286,7 @@ proc _check_registry {name version revision variants {return_all 0}} {
</span> set portilist [list]
set msg "The following versions of $name are currently installed:"
if {[macports::ui_isset ports_noninteractive]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- ui_msg "$UI_PREFIX [msgcat::mc $msg]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_msg "$::UI_PREFIX [msgcat::mc $msg]"
</span> }
foreach i $ilist {
set portstr [format "%s @%s_%s%s" [$i name] [$i version] [$i revision] [$i variants]]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -302,7 +297,7 @@ proc _check_registry {name version revision variants {return_all 0}} {
</span> if {[info exists macports::ui_options(questions_singlechoice)]} {
lappend portilist "$portstr"
} else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- ui_msg "$UI_PREFIX $portstr"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_msg "$::UI_PREFIX $portstr"
</span> }
}
if {[info exists macports::ui_options(questions_singlechoice)]} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -433,13 +428,12 @@ proc extract_archive_to_tmpdir {location} {
</span> }
}
t(ar|bz|lz|xz|gz) {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- global macports::hfscompression
</span> # Opportunistic HFS compression. bsdtar will automatically
# disable this if filesystem does not support compression.
# Don't use if not running as root, due to bugs:
# The system bsdtar on 10.15 suffers from https://github.com/libarchive/libarchive/issues/497
# Later versions fixed that problem but another remains: https://github.com/libarchive/libarchive/issues/1415
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {${macports::hfscompression} && [getuid] == 0 &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {${::macports::hfscompression} && [getuid] == 0 &&
</span> ![catch {macports::binaryInPath bsdtar}] &&
![catch {exec bsdtar -x --hfsCompression < /dev/null >& /dev/null}]} {
ui_debug "Using bsdtar with HFS+ compression (if valid)"
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -559,7 +553,7 @@ proc _activate_contents {port {rename_list {}}} {
</span> # Last, if the file exists, and belongs to another port, and force is set
# we remove the file from the file_map, take ownership of it, and
# clobber it
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array set todeactivate {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set todeactivate [list]
</span> try {
registry::write {
foreach file $imagefiles {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -577,11 +571,10 @@ proc _activate_contents {port {rename_list {}}} {
</span> if {$owner ne {} && $owner ne $port} {
# deactivate conflicting port if it is replaced_by this one
set result [mportlookup [$owner name]]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array unset portinfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- array set portinfo [lindex $result 1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists portinfo(replaced_by)] && [lsearch -regexp $portinfo(replaced_by) $replaced_by_re] != -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set portinfo [lindex $result 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $portinfo replaced_by] && [lsearch -regexp [dict get $portinfo replaced_by] $replaced_by_re] != -1} {
</span> # we'll deactivate the owner later, but before activating our files
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set todeactivate($owner) yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lappend todeactivate $owner
</span> set owner "replaced"
}
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -639,7 +632,7 @@ proc _activate_contents {port {rename_list {}}} {
</span> }
# deactivate ports replaced_by this one
<span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach owner [array names todeactivate] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach owner $todeactivate {
</span> if {$noexec || ![registry::run_target $owner deactivate [list ports_nodepcheck 1]]} {
deactivate [$owner name] "" "" 0 [list ports_nodepcheck 1]
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -728,7 +721,7 @@ proc _activate_contents {port {rename_list {}}} {
</span> ::file rename -force -- "${file}${baksuffix}" $file
}
# reactivate deactivated ports
<span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach entry [array names todeactivate] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach entry $todeactivate {
</span> if {[$entry state] eq "imaged" && ($noexec || ![registry::run_target $entry activate ""])} {
activate [$entry name] [$entry version] [$entry revision] [$entry variants] [list ports_activate_no-exec $noexec]
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -741,7 +734,7 @@ proc _activate_contents {port {rename_list {}}} {
</span>
throw [dict get $eOptions -errorcode] [dict get $eOptions -errorinfo]
} finally {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- #foreach entry [array names todeactivate] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #foreach entry $todeactivate {
</span> # registry::entry close $entry
#}
# remove temp image dir
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -751,8 +744,7 @@ proc _activate_contents {port {rename_list {}}} {
</span>
# These directories should not be removed during deactivation even if they are empty.
# TODO: look into what other dirs should go here
<span style='display:block; white-space:pre;background:#ffe0e0;'>-variable precious_dirs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-array set precious_dirs { /Library/LaunchDaemons 1 /Library/LaunchAgents 1 }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+variable precious_dirs [dict create /Library/LaunchDaemons 1 /Library/LaunchAgents 1]
</span>
proc _deactivate_file {dstfile} {
if {[catch {::file type $dstfile} filetype]} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -766,7 +758,7 @@ proc _deactivate_file {dstfile} {
</span> # 0 item means empty.
if { [llength [readdir $dstfile]] == 0 } {
variable precious_dirs
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {![info exists precious_dirs($dstfile)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![dict exists $precious_dirs $dstfile]} {
</span> ui_debug "deactivating directory: $dstfile"
::file delete -- $dstfile
} else {
</pre><pre style='margin:0'>
</pre>