<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/3358bc45035544bad9491db302fa68ff9f946f9d">https://github.com/macports/macports-base/commit/3358bc45035544bad9491db302fa68ff9f946f9d</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 3358bc45035544bad9491db302fa68ff9f946f9d
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Tue Feb 6 13:46:05 2024 +1100

<span style='display:block; white-space:pre;color:#404040;'>    Adopt dict in action_{search,list}
</span>---
 src/port/port.tcl | 103 +++++++++++++++++++++++++-----------------------------
 1 file changed, 48 insertions(+), 55 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 a4cb29852..c144cd4b1 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;'>@@ -3392,36 +3392,35 @@ proc action_variants { action portlist opts } {
</span> 
 
 proc action_search { action portlist opts } {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global private_options global_options
</span>     set status 0
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {![llength $portlist] && [info exists private_options(ports_no_args)] && $private_options(ports_no_args) eq "yes"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {![llength $portlist] && [info exists ::private_options(ports_no_args)] && $::private_options(ports_no_args) eq "yes"} {
</span>         ui_error "You must specify a search pattern"
         return 1
     }
 
     # Copy global options as we are going to modify the array
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    array set options [array get global_options]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set options [array get ::global_options]
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {[info exists options(ports_search_depends)] && $options(ports_search_depends) eq "yes"} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        array unset options ports_search_depends
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set options(ports_search_depends_fetch) yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set options(ports_search_depends_extract) yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set options(ports_search_depends_patch) yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set options(ports_search_depends_build) yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set options(ports_search_depends_lib) yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set options(ports_search_depends_run) yes
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set options(ports_search_depends_test) yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[dict exists $options ports_search_depends] && [dict get $options ports_search_depends] eq "yes"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        dict unset options ports_search_depends
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        dict set options ports_search_depends_fetch yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        dict set options ports_search_depends_extract yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        dict set options ports_search_depends_patch yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        dict set options ports_search_depends_build yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        dict set options ports_search_depends_lib yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        dict set options ports_search_depends_run yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        dict set options ports_search_depends_test yes
</span>     }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Array to hold given filters
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    array set filters {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Dictionary to hold given filters
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set filters [dict create]
</span>     # Default matchstyle
     set filter_matchstyle "none"
     set filter_case no
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    foreach { option } [array names options ports_search_*] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    foreach option [dict keys $options ports_search_*] {
</span>         set opt [string range $option 13 end]
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        if { $options($option) ne "yes" } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[dict get $options $option] ne "yes"} {
</span>             continue
         }
         switch -- $opt {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3443,12 +3442,12 @@ proc action_search { action portlist opts } {
</span>             }
         }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        set filters($opt) "yes"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        dict set filters $opt yes
</span>     }
     # Set default search filter if none was given
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if { [array size filters] == 0 } {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set filters(name) "yes"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set filters(description) "yes"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[dict size $filters] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        dict set filters name yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        dict set filters description yes
</span>     }
 
     set separator ""
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3467,7 +3466,7 @@ proc action_search { action portlist opts } {
</span> 
         set res [list]
         set portfound 0
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach { opt } [array names filters] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach opt [dict keys $filters] {
</span>             # Map from friendly name
             set opt [map_friendly_field_names $opt]
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3485,48 +3484,48 @@ proc action_search { action portlist opts } {
</span>         set res [portlist_sort $res]
 
         set joiner ""
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach info $res {
</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:#e0ffe0;'>+        foreach portinfo $res {
</span>             # XXX is this the right place to verify an entry?
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {![info exists portinfo(name)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {![dict exists $portinfo name]} {
</span>                 puts stderr "Invalid port entry, missing portname"
                 continue
             }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {![info exists portinfo(description)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                puts stderr "Invalid port entry for $portinfo(name), missing description"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set res_name [dict get $portinfo name]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {![dict exists $portinfo description]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                puts stderr "Invalid port entry for $res_name, missing description"
</span>                 continue
             }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {![info exists portinfo(version)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                puts stderr "Invalid port entry for $portinfo(name), missing version"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set res_description [dict get $portinfo description]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {![dict exists $portinfo version]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                puts stderr "Invalid port entry for $res_name, missing version"
</span>                 continue
             }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+            set res_version [dict get $portinfo version]
</span> 
             if {[macports::ui_isset ports_quiet]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                puts $portinfo(name)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                puts $res_name
</span>             } else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {[info exists options(ports_search_line)]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        && $options(ports_search_line) eq "yes"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {[dict exists $options ports_search_line]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        && [dict get $options ports_search_line] eq "yes"} {
</span>                     # check for ports without category, e.g. replaced_by stubs
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    if {[info exists portinfo(categories)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        puts "$portinfo(name)\t$portinfo(version)\t$portinfo(categories)\t$portinfo(description)"
</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;'>+                        puts "${res_name}\t${res_version}\t[dict get $portinfo categories]\t$res_description"
</span>                     } else {
                         # keep two consecutive tabs in order to provide consistent columns' content
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                        puts "$portinfo(name)\t$portinfo(version)\t\t$portinfo(description)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        puts "${res_name}\t${res_version}\t\t$res_description"
</span>                     }
                 } else {
                     puts -nonewline $joiner
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    puts -nonewline "$portinfo(name) @$portinfo(version)"
</span><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;'>-                        puts -nonewline "_$portinfo(revision)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    puts -nonewline "$res_name @$res_version"
</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;'>+                        puts -nonewline "_[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;'>-                        puts -nonewline " ([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;'>+                        puts -nonewline " ([join [dict get $portinfo categories] ", "])"
</span>                     }
                     puts ""
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    puts [wrap [join $portinfo(description)] 0 [string repeat " " 4]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    puts [wrap [join $res_description] 0 [string repeat " " 4]]
</span>                 }
             }
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3536,8 +3535,8 @@ proc action_search { action portlist opts } {
</span>         if { !$portfound } {
             ui_notice "No match for $portname found"
         } elseif {[llength $res] > 1} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {(![info exists global_options(ports_search_line)]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    || $global_options(ports_search_line) ne "yes")} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {(![info exists ::global_options(ports_search_line)]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    || $::global_options(ports_search_line) ne "yes")} {
</span>                 ui_notice "\nFound [llength $res] ports."
             }
         }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3545,19 +3544,15 @@ proc action_search { action portlist opts } {
</span>         set separator "--\n"
     }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    array unset options
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    array unset filters
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span>     return $status
 }
 
 
 proc action_list { action portlist opts } {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    global private_options
</span>     set status 0
 
     # Default to list all ports if no portnames are supplied
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if { ![llength $portlist] && [info exists private_options(ports_no_args)] && $private_options(ports_no_args) eq "yes"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if { ![llength $portlist] && [info exists ::private_options(ports_no_args)] && $::private_options(ports_no_args) eq "yes"} {
</span>         add_to_portlist_with_defaults portlist [dict create name "-all-"]
     }
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3579,14 +3574,12 @@ proc action_list { action portlist opts } {
</span>             }
         }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach {name array} $res {
</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 $array
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach {name portinfo} $res {
</span>             set outdir ""
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {[info exists portinfo(portdir)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set outdir $portinfo(portdir)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {[dict exists $portinfo portdir]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                set outdir [dict get $portinfo portdir]
</span>             }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts [format "%-30s @%-14s %s" $portinfo(name) $portinfo(version) $outdir]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            puts [format "%-30s @%-14s %s" [dict get $portinfo name] [dict get $portinfo version] $outdir]
</span>         }
     }
 
</pre><pre style='margin:0'>

</pre>