<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/ae6cef73ce312baf8b98195ed7121ce19742147a">https://github.com/macports/macports-base/commit/ae6cef73ce312baf8b98195ed7121ce19742147a</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit ae6cef73ce312baf8b98195ed7121ce19742147a
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Wed Feb 21 07:07:45 2024 +1100
<span style='display:block; white-space:pre;color:#404040;'> Precompute porturl prefix for each source
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> This saves doing it each loop iteration in mportsearch, mportlookup,
</span><span style='display:block; white-space:pre;color:#404040;'> and mportlistall.
</span>---
src/macports1.0/macports.tcl | 76 ++++++++++++++------------------------------
1 file changed, 23 insertions(+), 53 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 97b0b4ecd..d7404398d 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;'>@@ -937,6 +937,8 @@ proc mportinit {{up_ui_options {}} {up_options {}} {up_variations {}}} {
</span> if {![info exists sources_conf]} {
return -code error "sources_conf must be set in ${macports_conf_path}/macports.conf or in your ${macports_user_dir}/macports.conf file"
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Precompute mapping of source URLs to prefix to use for porturls (used in mportlookup etc)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ::macports::porturl_prefix_map [dict create]
</span> set sources_conf_comment_re {^\s*#|^$}
set sources_conf_source_re {^([\w-]+://\S+)(?:\s+\[(\w+(?:,\w+)*)\])?$}
set fd [open $sources_conf r]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -960,6 +962,18 @@ proc mportinit {{up_ui_options {}} {up_options {}} {up_variations {}}} {
</span> ui_warn "MacPorts is configured to use an unsigned source for the ports tree.\
Please edit sources.conf and change '$url' to '[string range $url 0 end-6]tarballs/ports.tar'."
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ switch -- [macports::getprotocol $url] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rsync -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ https -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ http -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ftp {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Rsync and snapshot tarballs create Portfiles in the local filesystem
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set ::macports::porturl_prefix_map $url file://[macports::getsourcepath $url]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ default {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set ::macports::porturl_prefix_map $url $url
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span> lappend sources [concat [list $url] $flags]
} else {
ui_warn "$sources_conf specifies invalid source '$line', ignored."
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3224,14 +3238,13 @@ proc mportsync {{options {}}} {
</span> # <tt>array set</tt> to create an associate array where the port names
# are the keys and the lines from portindex are the values.
proc mportsearch {pattern {case_sensitive yes} {matchstyle regexp} {field name}} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- global macports::sources
</span> set matches [list]
set easy [expr {$field eq "name"}]
set found 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> set source [lindex $source 0]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set protocol [macports::getprotocol $source]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set porturl_prefix [dict get $::macports::porturl_prefix_map $source]
</span> macports_try -pass_signal {
set fd [open [macports::getindex $source] r]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3280,23 +3293,8 @@ proc mportsearch {pattern {case_sensitive yes} {matchstyle regexp} {field name}}
</span> }
if {$matchres == 1} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- switch -- $protocol {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- rsync {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # Rsync files are local
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set source_url file://[macports::getsourcepath $source]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- https -
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- http -
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ftp {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # snapshot tarball
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set source_url file://[macports::getsourcepath $source]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- default {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set source_url $source
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span> if {[dict exists $portinfo portdir]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set porturl ${source_url}/[dict get $portinfo portdir]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set porturl ${porturl_prefix}/[dict get $portinfo portdir]
</span> dict set portinfo porturl $porturl
ui_debug "Found port in $porturl"
} else {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3343,13 +3341,13 @@ proc mportlookup {name} {
</span> set matches [list]
set normname [string tolower $name]
foreach source $::macports::sources {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set source [lindex $source 0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set protocol [macports::getprotocol $source]
</span> if {![dict exists $quick_index $sourceno $normname]} {
# no entry in this source, advance to next source
incr sourceno 1
continue
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ set source [lindex $source 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set porturl_prefix [dict get $::macports::porturl_prefix_map $source]
</span> # 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.
set offset [dict get $quick_index $sourceno $normname]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3364,21 +3362,8 @@ proc mportlookup {name} {
</span> set len [lindex $line 1]
set portinfo [read $fd $len]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- switch -- $protocol {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- rsync {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set source_url file://[macports::getsourcepath $source]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- https -
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- http -
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ftp {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set source_url file://[macports::getsourcepath $source]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- default {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set source_url $source
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span> if {[dict exists $portinfo portdir]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- dict set portinfo porturl ${source_url}/[dict get $portinfo portdir]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set portinfo porturl ${porturl_prefix}/[dict get $portinfo portdir]
</span> }
lappend matches $name $portinfo
} on error {_ eOptions} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3407,13 +3392,11 @@ proc mportlookup {name} {
</span> # info. See the return value of mportsearch().
# @see mportsearch()
proc mportlistall {} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- global macports::sources
</span> set matches [list]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> set found 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> set source [lindex $source 0]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set protocol [macports::getprotocol $source]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set porturl_prefix [dict get $::macports::porturl_prefix_map $source]
</span> macports_try -pass_signal {
set fd [open [macports::getindex $source] r]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -3424,21 +3407,8 @@ proc mportlistall {} {
</span> set len [lindex $line 1]
set portinfo [read $fd $len]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- switch -- $protocol {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- rsync {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set source_url file://[macports::getsourcepath $source]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- https -
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- http -
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ftp {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set source_url file://[macports::getsourcepath $source]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- default {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set source_url $source
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span> if {[dict exists $portinfo portdir]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- dict set portinfo porturl ${source_url}/[dict get $portinfo portdir]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dict set portinfo porturl ${porturl_prefix}/[dict get $portinfo portdir]
</span> }
lappend matches $name $portinfo
}
</pre><pre style='margin:0'>
</pre>