<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/cff7ba05966e1ed9926605388589521e75f5d6b8">https://github.com/macports/macports-base/commit/cff7ba05966e1ed9926605388589521e75f5d6b8</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 cff7ba059 port.tcl: adopt dict through to action_info
</span>cff7ba059 is described below
<span style='display:block; white-space:pre;color:#808000;'>commit cff7ba05966e1ed9926605388589521e75f5d6b8
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Fri Feb 2 08:51:05 2024 +1100
<span style='display:block; white-space:pre;color:#404040;'> port.tcl: adopt dict through to action_info
</span>---
src/port/port.tcl | 278 ++++++++++++++++++++++--------------------------------
1 file changed, 112 insertions(+), 166 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port/port.tcl b/src/port/port.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 269841b35..b4cd843ac 100755
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port/port.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port/port.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -203,8 +203,7 @@ proc url_to_portname { url {quiet 0} } {
</span> ui_msg "Please verify that the directory and portfile syntax are correct."
}
} else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array set portinfo [mportinfo $ctx]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set portname $portinfo(name)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set portname [dict get [mportinfo $ctx] name]
</span> mportclose $ctx
}
cd $savedir
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -246,17 +245,15 @@ proc require_portlist { nameportlist {is_upgrade "no"} } {
</span> # sort portlist so dependents come before their dependencies
proc portlist_sortdependents { portlist } {
foreach p $portlist {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array set pvals $p
</span> # normalise port name to lower case
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set norm_name [string tolower $pvals(name)]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set norm_name [string tolower [dict get $p name]]
</span> lappend entries($norm_name) $p
if {![info exists dependents($norm_name)]} {
set dependents($norm_name) [list]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach result [registry::list_dependents $pvals(name)] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach result [registry::list_dependents [dict get $p name]] {
</span> lappend dependents($norm_name) [string tolower [lindex $result 2]]
}
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array unset pvals
</span> }
set ret [list]
foreach p $portlist {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -270,8 +267,7 @@ proc portlist_sortdependents_helper {p up_entries up_dependents up_seen up_retli
</span> if {![info exists seen($p)]} {
set seen($p) 1
upvar $up_entries entries $up_dependents dependents $up_retlist retlist
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array set pvals $p
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach dependent $dependents([string tolower $pvals(name)]) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach dependent $dependents([string tolower [dict get $p name]]) {
</span> if {[info exists entries($dependent)]} {
foreach entry $entries($dependent) {
portlist_sortdependents_helper $entry entries dependents seen retlist
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -404,23 +400,14 @@ proc wraplabel {label string maxlen {indent ""}} {
</span> # Port selection
##########################################
proc unique_results_to_portlist {infos} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set result [list]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- array unset unique
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach {name info} $infos {
</span><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 $info
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set portentry [entry_for_portlist [list url $portinfo(porturl) name $name options [array get ::global_options]]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set unique [dict create]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach {name portinfo} $infos {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set portentry [entry_for_portlist [list url [dict get $portinfo porturl] name $name options [array get ::global_options]]]
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array unset entry
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- array set entry $portentry
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists unique($entry(fullname))]} continue
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set unique($entry(fullname)) 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- lappend result $portentry
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $unique [dict get $portentry fullname]]} continue
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set unique [dict get $portentry fullname] $portentry
</span> }
<span style='display:block; white-space:pre;background:#ffe0e0;'>- return $result
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return [dict values $unique]
</span> }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -467,7 +454,7 @@ proc get_current_port {} {
</span> }
set results [list]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- add_to_portlist_with_defaults results [list url $url name $portname]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ add_to_portlist_with_defaults results [dict create url $url name $portname]
</span> return $results
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -490,7 +477,7 @@ proc get_installed_ports { {ignore_active yes} {active yes} } {
</span> set iactive [lindex $i 4]
if { ${ignore_active} eq "yes" || (${active} eq "yes") == (${iactive} != 0) } {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- add_to_portlist_with_defaults results [list name $iname version "${iversion}_${irevision}" variants $ivariants]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ add_to_portlist_with_defaults results [dict create name $iname version "${iversion}_${irevision}" variants $ivariants]
</span> }
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -521,22 +508,18 @@ proc get_actinact_ports {} {
</span> set active_ports [get_active_ports]
set results [list]
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ set inact [dict create]
</span> foreach port $inactive_ports {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array set portspec $port
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set portname $portspec(name)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- lappend inact($portname) $port
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict lappend inact [dict get $port name] $port
</span> }
foreach port $active_ports {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array set portspec $port
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set portname $portspec(name)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists inact($portname)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {![info exists added_inact($portname)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach inact_spec $inact($portname) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- lappend results $inact_spec
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set added_inact($portname) 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set portname [dict get $port name]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $inact $portname]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set inact_ports [dict get $inact $portname]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$inact_ports ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lappend results {*}$inact_ports
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set inact $portname ""
</span> }
lappend results $port
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -630,7 +613,7 @@ proc get_outdated_ports {} {
</span>
# Add outdated ports to our results list
if { $comp_result < 0 } {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- add_to_portlist_with_defaults results [list name $portname version $installed_compound variants [split_variants $installed_variants]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ add_to_portlist_with_defaults results [dict create name $portname version $installed_compound variants [split_variants $installed_variants]]
</span> }
}
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -644,9 +627,7 @@ proc get_obsolete_ports {} {
</span> set results [list]
foreach i $ilist {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array set port $i
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[catch {mportlookup $port(name)} result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[catch {mportlookup [dict get $i name]} result]} {
</span> ui_debug "$::errorInfo"
break_softcontinue "lookup of portname $portname failed: $result" 1 status
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -679,7 +660,7 @@ proc get_ports_with_prop {propname propval} {
</span> set iepoch [lindex $i 5]
set regref [registry::open_entry $iname $iversion $irevision $ivariants $iepoch]
if {[registry::property_retrieve $regref $propname] eq $propval} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- add_to_portlist_with_defaults results [list name $iname version "${iversion}_${irevision}" variants [split_variants $ivariants]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ add_to_portlist_with_defaults results [dict create name $iname version "${iversion}_${irevision}" variants [split_variants $ivariants]]
</span> }
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -708,7 +689,7 @@ proc get_leaves_ports {} {
</span> foreach i $ilist {
set iname [lindex $i 0]
if {[registry::list_dependents $iname] eq ""} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- add_to_portlist_with_defaults results [list name $iname version "[lindex $i 1]_[lindex $i 2]" variants [split_variants [lindex $i 3]]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ add_to_portlist_with_defaults results [dict create name $iname version "[lindex $i 1]_[lindex $i 2]" variants [split_variants [lindex $i 3]]]
</span> }
}
return [portlist_sort [opIntersection $results [get_unrequested_ports]]]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -740,7 +721,7 @@ proc get_dependent_ports {portname recursive} {
</span> # could return specific versions here using registry2.0 features
set results [list]
foreach dep $deplist {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- add_to_portlist_with_defaults results [list name [lindex $dep 2]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ add_to_portlist_with_defaults results [dict create name [lindex $dep 2]]
</span> }
# actually do this iteratively to avoid hitting Tcl's recursion limit
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -755,7 +736,7 @@ proc get_dependent_ports {portname recursive} {
</span> set rdeplist [registry::list_dependents $depname]
foreach rdep $rdeplist {
lappend newlist $rdep
<span style='display:block; white-space:pre;background:#ffe0e0;'>- add_to_portlist_with_defaults rportlist [list name [lindex $rdep 2]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ add_to_portlist_with_defaults rportlist [dict create name [lindex $rdep 2]]
</span> }
}
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -773,17 +754,16 @@ proc get_dependent_ports {portname recursive} {
</span>
proc get_rdepends_ports {portname} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {![info exists ::portDependenciesArray]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # make an associative array of all the port names and their (reverse) dependencies
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![info exists ::portDependenciesDict]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # make a dictionary of all the port names and their (reverse) dependencies
</span> # much faster to build this once than to call mportsearch thousands of times
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set deptypes {depends_fetch depends_extract depends_patch depends_build depends_lib depends_run depends_test}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach {pname pinfolist} [mportlistall] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- array unset pinfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- array set pinfo $pinfolist
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ::portDependenciesDict [dict create]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set deptypes [list depends_fetch depends_extract depends_patch depends_build depends_lib depends_run depends_test]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach {pname pinfo} [mportlistall] {
</span> foreach dtype $deptypes {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists pinfo($dtype)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach depspec $pinfo($dtype) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- lappend ::portDependenciesArray([string tolower [lindex [split $depspec :] end]]) $pname
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $pinfo $dtype]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach depspec [dict get $pinfo $dtype] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict lappend ::portDependenciesDict [string tolower [lindex [split $depspec :] end]] $pname
</span> }
}
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -795,13 +775,13 @@ proc get_rdepends_ports {portname} {
</span> while {[llength $portList] > 0} {
set aPort [lindex $portList 0]
set portList [lreplace $portList 0 0]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists ::portDependenciesArray($aPort)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach possiblyNewPort $::portDependenciesArray($aPort) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $::portDependenciesDict $aPort]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach possiblyNewPort [dict get $::portDependenciesDict $aPort] {
</span> set lcport [string tolower $possiblyNewPort]
if {![info exists seen($lcport)]} {
set seen($lcport) 1
lappend portList $lcport
<span style='display:block; white-space:pre;background:#ffe0e0;'>- add_to_portlist_with_defaults results [list name $possiblyNewPort]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ add_to_portlist_with_defaults results [dict create name $possiblyNewPort]
</span> }
}
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -831,22 +811,20 @@ proc get_dep_ports {portname recursive} {
</span> return -code error "Port $portname not found"
}
}
<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;'>- set porturl $portinfo(porturl)
</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;'>+ set porturl [dict get $portinfo porturl]
</span>
# open portfile
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[catch {set mport [mportopen $porturl [list subport $portinfo(name)] [array get global_variations]]} result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[catch {set mport [mportopen $porturl [dict create subport [dict get $portinfo name]] [array get global_variations]]} result]} {
</span> ui_debug $::errorInfo
if {[macports::ui_isset ports_processall]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- ui_error "Unable to open port $portinfo(name): $result"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_error "Unable to open port [dict get $portinfo name]: $result"
</span> return [list]
} else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- return -code error "Unable to open port $portinfo(name): $result"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return -code error "Unable to open port [dict get $portinfo name]: $result"
</span> }
}
<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 [mportinfo $mport]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set portinfo [dict merge $portinfo [mportinfo $mport]]
</span> mportclose $mport
# gather its deps
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -855,9 +833,9 @@ proc get_dep_ports {portname recursive} {
</span>
set deplist [list]
foreach type $deptypes {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists portinfo($type)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach dep $portinfo($type) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- add_to_portlist_with_defaults results [list name [lindex [split $dep :] end]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $portinfo $type]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach dep [dict get $portinfo $type] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ add_to_portlist_with_defaults results [dict create name [lindex [split $dep :] end]]
</span> lappend deplist $dep
}
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -882,26 +860,24 @@ proc get_dep_ports {portname recursive} {
</span> ui_error "Port $depname not found"
continue
}
<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;'>- set porturl $portinfo(porturl)
</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;'>+ set porturl [dict get $portinfo porturl]
</span>
# open its portfile
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[catch {set mport [mportopen $porturl [list subport $portinfo(name)] [array get global_variations]]} result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[catch {set mport [mportopen $porturl [dict create subport [dict get $portinfo name]] [array get global_variations]]} result]} {
</span> ui_debug $::errorInfo
ui_error "Unable to open port $depname: $result"
continue
}
<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 [mportinfo $mport]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set portinfo [dict merge $portinfo [mportinfo $mport]]
</span> mportclose $mport
# collect its deps
set rdeplist [list]
foreach type $deptypes {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists portinfo($type)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach rdep $portinfo($type) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- add_to_portlist_with_defaults results [list name [lindex [split $rdep :] end]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $portinfo $type]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach rdep [dict get $portinfo $type] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ add_to_portlist_with_defaults results [dict create name [lindex [split $rdep :] end]]
</span> lappend rdeplist $rdep
}
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -910,7 +886,7 @@ proc get_dep_ports {portname recursive} {
</span> # add them to the lists
foreach rdep $rdeplist {
lappend newlist $rdep
<span style='display:block; white-space:pre;background:#ffe0e0;'>- add_to_portlist_with_defaults rportlist [list name [lindex [split $rdep :] end]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ add_to_portlist_with_defaults rportlist [dict create name [lindex [split $rdep :] end]]
</span> }
}
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -946,30 +922,28 @@ proc get_subports {portname} {
</span> return -code error "Port $portname not found"
}
}
<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;'>- set porturl $portinfo(porturl)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lassign $result portname portinfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set porturl [dict get $portinfo porturl]
</span>
# open portfile
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[catch {set mport [mportopen $porturl [list subport $portinfo(name)] [array get global_variations]]} result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[catch {set mport [mportopen $porturl [dict create subport $portname] [array get global_variations]]} result]} {
</span> ui_debug $::errorInfo
if {[macports::ui_isset ports_processall]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- ui_error "Unable to open port $portinfo(name): $result"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_error "Unable to open port $portname: $result"
</span> return [list]
} else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- return -code error "Unable to open port $portinfo(name): $result"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return -code error "Unable to open port $portname: $result"
</span> }
}
<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 [mportinfo $mport]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set portinfo [array merge $portinfo [mportinfo $mport]]
</span> mportclose $mport
# gather its subports
set results [list]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists portinfo(subports)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach subport $portinfo(subports) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- add_to_portlist_with_defaults results [list name $subport]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $portinfo subports]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach subport [dict get $portinfo subports] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ add_to_portlist_with_defaults results [dict create name $subport]
</span> }
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1637,11 +1611,9 @@ proc action_log { action portlist opts } {
</span> if {[llength $result] < 2} {
break_softcontinue "Port $portname not found" 1 status
}
<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;'>- set porturl $portinfo(porturl)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set portdir $portinfo(portdir)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set portname $portinfo(name)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lassign $result portname portinfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set porturl [dict get $portinfo porturl]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set portdir [dict get $portinfo portdir]
</span> } elseif {$porturl ne "file://."} {
# Extract the portdir from porturl and use it to search PortIndex.
# Only the last two elements of the path (porturl) make up the
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1658,15 +1630,14 @@ proc action_log { action portlist opts } {
</span> if {[llength $result] < 2} {
break_softcontinue "Portdir $portdir not found" 1 status
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array unset portinfo
</span> set matchindex [lsearch -exact -nocase $result $portname]
if {$matchindex != -1} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array set portinfo [lindex $result [incr matchindex]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set portinfo [lindex $result [incr matchindex]]
</span> } else {
ui_warn "Portdir $portdir doesn't seem to belong to portname $portname"
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array set portinfo [lindex $result 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:#ffe0e0;'>- set portname $portinfo(name)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set portname [dict get $portinfo name]
</span> }
set portpath [macports::getportdir $porturl]
set logfile [file join [macports::getportlogpath $portpath $portname] "main.log"]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1724,7 +1695,6 @@ proc action_info { action portlist opts } {
</span> set index_only 1
}
puts -nonewline $separator
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array unset portinfo
</span> # If we have a url, use that, since it's most specific
# otherwise try to map the portname to a url
if {$porturl eq "" || $index_only} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1736,40 +1706,26 @@ proc action_info { action portlist opts } {
</span> if {[llength $result] < 2} {
break_softcontinue "Port $portname not found" 1 status
}
<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;'>- set porturl $portinfo(porturl)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set portdir $portinfo(portdir)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lassign $result portname portinfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set porturl [dict get $portinfo porturl]
</span> }
if {!$index_only} {
# Add any global_variations to the variations
# specified for the port (so we get e.g. dependencies right)
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array unset merged_variations
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- array set merged_variations $variations
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach { variation value } [array get global_variations] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if { ![info exists merged_variations($variation)] } {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set merged_variations($variation) $value
</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:#e0ffe0;'>+ set merged_variations [dict merge [array get global_variations] $variations]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> if {![dict exists $options subport]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists portinfo(name)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- dict set options subport $portinfo(name)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- dict set options subport $portname
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set options subport $portname
</span> }
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[catch {set mport [mportopen $porturl $options [array get merged_variations]]} result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[catch {set mport [mportopen $porturl $options $merged_variations]} result]} {
</span> ui_debug "$::errorInfo"
break_softcontinue "Unable to open port: $result" 1 status
}
dict unset options subport
<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 [mportinfo $mport]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set portinfo [dict merge $portinfo [mportinfo $mport]]
</span> mportclose $mport
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists portdir]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set portinfo(portdir) $portdir
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span> } elseif {![info exists portinfo]} {
ui_warn "no PortIndex entry found for $portname"
continue
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1779,7 +1735,7 @@ proc action_info { action portlist opts } {
</span> # Understand which info items are actually lists by specifying
# separators for the output. The list items correspond to the
# normal, --pretty, and --line output formats.
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array set list_map {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set list_map [dict create {*}{
</span> categories {", " ", " ","}
depends_fetch {", " ", " ","}
depends_extract {", " ", " ","}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1794,10 +1750,10 @@ proc action_info { action portlist opts } {
</span> conflicts {", " ", " ","}
subports {", " ", " ","}
patchfiles {", " ", " ","}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }]
</span>
# Label map for pretty printing
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array set pretty_label {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set pretty_label [dict create {*}{
</span> heading ""
variants Variants
depends_fetch "Fetch Dependencies"
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1818,10 +1774,10 @@ proc action_info { action portlist opts } {
</span> replaced_by "Replaced by"
subports "Sub-ports"
patchfiles "Patchfiles"
<span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }]
</span>
# Wrap-length map for pretty printing
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array set pretty_wrap {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set pretty_wrap [dict create {*}{
</span> heading 0
replaced_by 22
variants 22
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1841,7 +1797,7 @@ proc action_info { action portlist opts } {
</span> maintainers 22
subports 22
patchfiles 22
<span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }]
</span>
# Interpret a convenient field abbreviation
if {[dict exists $options ports_info_depends] && [dict get $options ports_info_depends] eq "yes"} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1916,7 +1872,8 @@ proc action_info { action portlist opts } {
</span>
set fields_tried [list]
if {![llength $opts_todo]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set opts_todo {ports_info_heading
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set opts_todo {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ports_info_heading
</span> ports_info_replaced_by
ports_info_subports
ports_info_variants
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1942,35 +1899,35 @@ proc action_info { action portlist opts } {
</span> }
# Artificial field names to reproduce prettyprinted summary
if {$opt eq "heading"} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set inf "$portinfo(name) @$portinfo(version)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set inf "[dict get $portinfo name] @[dict get $portinfo version]"
</span> set ropt "heading"
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists portinfo(revision)] && $portinfo(revision) > 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- append inf "_$portinfo(revision)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $portinfo revision] && [dict get $portinfo revision] > 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ append inf "_[dict get $portinfo revision]"
</span> }
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists portinfo(categories)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- append inf " ([join $portinfo(categories) ", "])"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $portinfo categories]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ append inf " ([join [dict get $portinfo categories] ", "])"
</span> }
} elseif {$opt eq "fullname"} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set inf "$portinfo(name) @"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- append inf [composite_version $portinfo(version) $portinfo(active_variants)]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set inf "[dict get $portinfo name] @"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ append inf [composite_version [dict get $portinfo version] [dict get $portinfo active_variants]]
</span> set ropt "fullname"
} else {
# Map from friendly name
set ropt [map_friendly_field_names $opt]
# If there's no such info, move on
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {![info exists portinfo($ropt)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![dict exists $portinfo $ropt]} {
</span> set inf ""
} else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set inf $portinfo($ropt)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set inf [dict get $portinfo $ropt]
</span> }
}
# Calculate field label
set label ""
if {$pretty_print} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists pretty_label($ropt)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set label $pretty_label($ropt)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $pretty_label $ropt]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set label [dict get $pretty_label $ropt]
</span> } else {
set label $opt
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2006,22 +1963,21 @@ proc action_info { action portlist opts } {
</span> # Format list of maintainers
if {$ropt eq "maintainers"} {
set infresult [list]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach serialized [macports::unobscure_maintainers $inf] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach maintainer [macports::unobscure_maintainers $inf] {
</span> set parts [list]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array set maintainer $serialized
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists maintainer(email)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $maintainer email]} {
</span> set item [expr {$pretty_print ? "Email: " : ""}]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- append item $maintainer(email)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ append item [dict get $maintainer email]
</span> lappend parts $item
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists maintainer(github)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $maintainer github]} {
</span> set item [expr {$pretty_print ? "GitHub: " : ""}]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- append item $maintainer(github)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ append item [dict get $maintainer github]
</span> lappend parts $item
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists maintainer(keyword)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- switch $maintainer(keyword) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $maintainer keyword]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ switch [dict get $maintainer keyword] {
</span> nomaintainer {
lappend parts [expr {$pretty_print ? "none" : ""}]
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2033,7 +1989,6 @@ proc action_info { action portlist opts } {
</span> }
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array unset maintainer
</span> lappend infresult [join $parts [expr {$pretty_print ? ", " : " "}]]
}
set inf $infresult
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2041,11 +1996,6 @@ proc action_info { action portlist opts } {
</span>
# Format variants
if {$pretty_print && $ropt eq "variants"} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array unset vinfo
</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;'>- array set vinfo $portinfo(vinfo)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> set pi_vars $inf
set inf [list]
foreach v [lsort $pi_vars] {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2057,12 +2007,8 @@ proc action_info { action portlist opts } {
</span> # selected by variants.conf, prefixed with (+)/(-)
set varmodifier "($global_variations($v))"
# Retrieve additional information from the new key.
<span style='display:block; white-space:pre;background:#ffe0e0;'>- } elseif {[info exists vinfo]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- array unset variant
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- array set variant $vinfo($v)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists variant(is_default)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set varmodifier "\[$variant(is_default)]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } elseif {[dict exists $portinfo vinfo $v is_default]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set varmodifier "\[[dict get $portinfo vinfo $v is_default]]"
</span> }
lappend inf "$varmodifier$v"
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2080,8 +2026,8 @@ proc action_info { action portlist opts } {
</span>
# End of special pretty-print formatting for certain fields
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists list_map($ropt)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set field [join $inf [lindex $list_map($ropt) $list_map_index]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $list_map $ropt]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set field [join $inf [lindex [dict get $list_map $ropt] $list_map_index]]
</span> } else {
set field $inf
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2103,14 +2049,14 @@ proc action_info { action portlist opts } {
</span> }
if {$label eq ""} {
set wrap_len 0
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists pretty_wrap($ropt)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set wrap_len $pretty_wrap($ropt)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $pretty_wrap $ropt]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set wrap_len [dict get $pretty_wrap $ropt]
</span> }
lappend fields [wrap $field 0 [string repeat " " $wrap_len]]
} else {
set wrap_len [string length $label]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists pretty_wrap($ropt)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set wrap_len $pretty_wrap($ropt)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $pretty_wrap $ropt]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set wrap_len [dict get $pretty_wrap $ropt]
</span> }
lappend fields [wraplabel $label $field 0 [string repeat " " $wrap_len]]
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3582,7 +3528,7 @@ proc action_search { action portlist opts } {
</span>
set tmp [list]
foreach {name info} $matches {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- add_to_portlist_with_defaults tmp [concat [list name $name] $info]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ add_to_portlist_with_defaults tmp [dict create name $name {*}$info]
</span> }
set res [opUnion $res $tmp]
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3662,7 +3608,7 @@ proc action_list { action portlist opts } {
</span>
# Default to list all ports if no portnames are supplied
if { ![llength $portlist] && [info exists private_options(ports_no_args)] && $private_options(ports_no_args) eq "yes"} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- add_to_portlist_with_defaults portlist [list name "-all-"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ add_to_portlist_with_defaults portlist [dict create name "-all-"]
</span> }
foreachport $portlist {
</pre><pre style='margin:0'>
</pre>