<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/2f3d072376361cf2933744117def44fee6f9c557">https://github.com/macports/macports-base/commit/2f3d072376361cf2933744117def44fee6f9c557</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 2f3d07237 Use dict for quick index, ping cache
</span>2f3d07237 is described below
<span style='display:block; white-space:pre;color:#808000;'>commit 2f3d072376361cf2933744117def44fee6f9c557
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Sun Feb 18 04:47:02 2024 +1100
<span style='display:block; white-space:pre;color:#404040;'> Use dict for quick index, ping cache
</span>---
src/macports1.0/macports.tcl | 83 +++++++++++++++++++++-----------------------
src/port/portindex.tcl | 2 +-
2 files changed, 41 insertions(+), 44 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/macports1.0/macports.tcl b/src/macports1.0/macports.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 99e28a31d..890e96e8d 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/macports1.0/macports.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/macports1.0/macports.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1487,9 +1487,9 @@ match macports.conf.default."
</span> macports_try -pass_signal {
set pingfile -1
set pingfile [open ${macports::portdbpath}/pingtimes r]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array set macports::ping_cache [gets $pingfile]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set macports::ping_cache [dict create {*}[gets $pingfile]]
</span> } on error {} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array set macports::ping_cache {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set macports::ping_cache [dict create]
</span> } finally {
if {$pingfile != -1} {
close $pingfile
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1501,7 +1501,7 @@ match macports.conf.default."
</span> if {![info exists macports::preferred_hosts]} {
set macports::preferred_hosts {}
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- array set macports::host_cache {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set macports::host_cache [dict create]
</span>
# load the quick index unless told not to
if {![macports::global_option_isset ports_no_load_quick_index]} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1541,16 +1541,14 @@ match macports.conf.default."
</span> # call this just before you exit
proc mportshutdown {} {
# save ping times
<span style='display:block; white-space:pre;background:#ffe0e0;'>- global macports::ping_cache macports::portdbpath
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[file writable $macports::portdbpath]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[file writable $::macports::portdbpath]} {
</span> catch {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach host [array names ping_cache] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # don't save expired entries
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[clock seconds] - [lindex $ping_cache($host) 1] < 86400} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- lappend pinglist_fresh $host $ping_cache($host)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set pingfile [open ${macports::portdbpath}/pingtimes w]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # don't save expired entries
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set now [clock seconds]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set pinglist_fresh [dict filter $::macports::ping_cache script {host entry} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ expr {$now - [lindex $entry 1] < 86400}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set pingfile [open ${::macports::portdbpath}/pingtimes w]
</span> puts $pingfile $pinglist_fresh
close $pingfile
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3349,21 +3347,21 @@ proc mportsearch {pattern {case_sensitive yes} {matchstyle regexp} {field name}}
</span> # info. See the return value of mportsearch().
# @see mportsearch()
proc mportlookup {name} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- global macports::sources macports::quick_index
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global macports::quick_index
</span>
set sourceno 0
set matches [list]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach source $sources {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach source $::macports::sources {
</span> set source [lindex $source 0]
set protocol [macports::getprotocol $source]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {![info exists quick_index(${sourceno},[string tolower $name])]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![dict exists $quick_index ${sourceno} [string tolower $name]]} {
</span> # no entry in this source, advance to next source
incr sourceno 1
continue
}
# The quick index is keyed on the port name, and provides the offset in
# the main PortIndex where the given port's PortInfo line can be found.
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set offset $quick_index(${sourceno},[string tolower $name])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set offset [dict get $quick_index ${sourceno} [string tolower $name]]
</span> incr sourceno 1
if {[catch {set fd [open [macports::getindex $source] r]} result]} {
ui_warn "Can't open index file for source: $source"
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3481,12 +3479,12 @@ proc mportlistall {} {
</span> # first if necessary. Private API of macports1.0, do not use this from outside
# macports1.0.
proc _mports_load_quickindex {} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- global macports::sources macports::quick_index
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global macports::quick_index
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>- unset -nocomplain macports::quick_index
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set quick_index [dict create]
</span>
set sourceno 0
<span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach source $sources {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach source $::macports::sources {
</span> unset -nocomplain quicklist
# chop off any tags
set source [lindex $source 0]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3513,13 +3511,11 @@ proc _mports_load_quickindex {} {
</span> incr sourceno
continue
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set quicklist [read $fd]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set quicklist [read -nonewline $fd]
</span> close $fd
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach entry [split $quicklist \n] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set quick_index(${sourceno},[lindex $entry 0]) [lindex $entry 1]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- incr sourceno 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set quick_index ${sourceno} [dict create {*}$quicklist]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ incr sourceno
</span> }
if {!$sourceno} {
ui_warn "No index(es) found! Have you synced your port definitions? Try running 'port selfupdate'."
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -5951,28 +5947,30 @@ proc macports::revupgrade_buildgraph {port stackname adjlistname revadjlistname
</span>
# get cached ping time for host, modified by blacklist and preferred list
proc macports::get_pingtime {host} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- global macports::ping_cache macports::host_cache \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- macports::host_blacklist macports::preferred_hosts
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global macports::ping_cache macports::host_cache
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists host_cache($host)]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return $host_cache($host)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach pattern $macports::host_blacklist {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[string match -nocase $pattern $host]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set host_cache($host) -1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return -1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![dict exists $host_cache $host]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach pattern $::macports::host_blacklist {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[string match -nocase $pattern $host]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set host_cache $host -1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return -1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span> }
<span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach pattern $macports::preferred_hosts {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[string match -nocase $pattern $host]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set host_cache($host) 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach pattern $::macports::preferred_hosts {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[string match -nocase $pattern $host]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set host_cache $host 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span> }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set host_cache $host 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict get $host_cache $host] != 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return [dict get $host_cache $host]
</span> }
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[info exists ping_cache($host)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $ping_cache $host]} {
</span> # expire entries after 1 day
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[clock seconds] - [lindex $ping_cache($host) 1] <= 86400} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return [lindex $ping_cache($host) 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[clock seconds] - [lindex [dict get $ping_cache $host] 1] <= 86400} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return [lindex [dict get $ping_cache $host] 0]
</span> }
}
return {}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -5980,8 +5978,7 @@ proc macports::get_pingtime {host} {
</span>
# cache a ping time of ms for host
proc macports::set_pingtime {host ms} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- global macports::ping_cache
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set ping_cache($host) [list $ms [clock seconds]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set ::macports::ping_cache $host [list $ms [clock seconds]]
</span> }
# get the version of a compiler (memoized)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port/portindex.tcl b/src/port/portindex.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index aa56bc9db..197c1f047 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port/portindex.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port/portindex.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -400,7 +400,7 @@ if {[file isfile $outpath]} {
</span> if {![file isfile ${outpath}.quick]} {
catch {set qindex [dict create {*}[mports_generate_quickindex ${outpath}]]}
} elseif {![catch {open ${outpath}.quick r} quickfd]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- catch {set qindex [dict create {*}[read $quickfd]]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ catch {set qindex [dict create {*}[read -nonewline $quickfd]]}
</span> close $quickfd
}
}
</pre><pre style='margin:0'>
</pre>