<pre style='margin:0'>
Joshua Root (jmroot) pushed a commit to branch release-2.10
in repository macports-base.
</pre>
<p><a href="https://github.com/macports/macports-base/commit/b5d9896b10b100c8adc28e235b0ccedb47aa3cb7">https://github.com/macports/macports-base/commit/b5d9896b10b100c8adc28e235b0ccedb47aa3cb7</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit b5d9896b10b100c8adc28e235b0ccedb47aa3cb7
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Sat Mar 8 17:53:11 2025 +1100
<span style='display:block; white-space:pre;color:#404040;'> Add fetch_credentials macports.conf option
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Allows specifying a username and password to use with any number of
</span><span style='display:block; white-space:pre;color:#404040;'> base URLs. Mostly useful in conjunction with *_site_local.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> (cherry picked from commit 3a42f0a81c4784340a51e2eb81bd2222318dbb97)
</span>---
src/macports1.0/macports.tcl | 23 ++++++++++++++++++++++-
src/package1.0/portarchivefetch.tcl | 9 +++++----
src/port1.0/portfetch.tcl | 6 +++---
3 files changed, 30 insertions(+), 8 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 5d50e2506..4f7c3dd7a 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;'>@@ -58,7 +58,7 @@ namespace eval macports {
</span> configureccache ccache_size configuredistcc configurepipe buildnicevalue buildmakejobs \
universal_archs build_arch macosx_sdk_version macosx_deployment_target \
macportsuser proxy_override_env proxy_http proxy_https proxy_ftp proxy_rsync proxy_skip \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- master_site_local patch_site_local archive_site_local buildfromsource \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ master_site_local patch_site_local archive_site_local fetch_credentials buildfromsource \
</span> revupgrade_autorun revupgrade_mode revupgrade_check_id_loadcmds \
host_blacklist preferred_hosts sandbox_enable sandbox_network delete_la_files cxx_stdlib \
default_compilers pkg_post_unarchive_deletions ui_interactive] {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -949,6 +949,7 @@ proc mportinit {{up_ui_options {}} {up_options {}} {up_variations {}}} {
</span> macports::buildmakejobs \
macports::host_blacklist \
macports::preferred_hosts \
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ macports::fetch_credentials \
</span> macports::keeplogs \
macports::place_worksymlink \
macports::revupgrade_autorun \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1752,6 +1753,14 @@ match macports.conf.default."
</span> if {[info exists archive_site_local] && ![info exists env(ARCHIVE_SITE_LOCAL)]} {
set env(ARCHIVE_SITE_LOCAL) $archive_site_local
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[info exists fetch_credentials]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[llength $fetch_credentials] % 2 != 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ui_error "fetch_credentials must have an even number of elements"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set fetch_credentials {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set fetch_credentials {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span>
# Proxy handling (done this late since Pextlib is needed)
if {![info exists proxy_override_env] || ![string is true -strict $proxy_override_env]} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2022,6 +2031,8 @@ proc macports::worker_init {workername portpath porturl portbuildpath options va
</span>
$workername alias get_compatible_xcode_versions macports::get_compatible_xcode_versions
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ $workername alias curlwrap macports::curlwrap
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> foreach opt $portinterp_options {
if {![info exists $opt]} {
variable $opt
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2113,6 +2124,16 @@ proc macports::get_tar_flags {suffix} {
</span> }
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# Wrapper for curl command to add credentials if configured
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc macports::curlwrap {action site credentials args} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ variable fetch_credentials
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[dict exists $fetch_credentials $site]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set credentials [dict get $fetch_credentials $site]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set credential_args [expr {$credentials ne {} ? [list -u $credentials] : {}}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ curl $action {*}$credential_args {*}$args
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> ##
# Extracts a Portfile from a tarball pointed to by the given \a url to a path
# in \c $portdbpath and returns its path.
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/package1.0/portarchivefetch.tcl b/src/package1.0/portarchivefetch.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 9917078a1..5da0ad702 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/package1.0/portarchivefetch.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/package1.0/portarchivefetch.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -190,9 +190,9 @@ proc portarchivefetch::fetchfiles {args} {
</span> }
set fetch_options [list]
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ set credentials {}
</span> if {[string length ${archivefetch.user}] || [string length ${archivefetch.password}]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- lappend fetch_options -u
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- lappend fetch_options "${archivefetch.user}:${archivefetch.password}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set credentials ${archivefetch.user}:${archivefetch.password}
</span> }
if {${archivefetch.use_epsv} ne "yes"} {
lappend fetch_options "--disable-epsv"
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -239,6 +239,7 @@ proc portarchivefetch::fetchfiles {args} {
</span> set signature ${incoming_path}/${archive}.rmd160
set sig_fetched 0
foreach site $urlmap($url_var) {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ set orig_site $site
</span> if {[string index $site end] ne "/"} {
append site /
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -248,7 +249,7 @@ proc portarchivefetch::fetchfiles {args} {
</span> if {!$archive_fetched} {
ui_msg "$UI_PREFIX [format [msgcat::mc "Attempting to fetch %s from %s"] $archive ${site}]"
try {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- curl fetch {*}$fetch_options $file_url ${incoming_path}/${archive}.TMP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ curlwrap fetch $orig_site $credentials {*}$fetch_options $file_url ${incoming_path}/${archive}.TMP
</span> set archive_fetched 1
} trap {POSIX SIG SIGINT} {_ eOptions} {
ui_debug [msgcat::mc "Aborted fetching archive due to SIGINT"]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -272,7 +273,7 @@ proc portarchivefetch::fetchfiles {args} {
</span> if {$archive_fetched} {
ui_msg "$UI_PREFIX [format [msgcat::mc "Attempting to fetch %s from %s"] ${archive}.rmd160 $site]"
try {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- curl fetch {*}$fetch_options ${file_url}.rmd160 $signature
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ curlwrap fetch $orig_site $credentials {*}$fetch_options ${file_url}.rmd160 $signature
</span> set sig_fetched 1
break
} trap {POSIX SIG SIGINT} {_ eOptions} {
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portfetch.tcl b/src/port1.0/portfetch.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 4d7256a7e..ae1eaa18d 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portfetch.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portfetch.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -501,9 +501,9 @@ proc portfetch::fetchfiles {args} {
</span> variable urlmap
set fetch_options [list]
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ set credentials {}
</span> if {[string length ${fetch.user}] || [string length ${fetch.password}]} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- lappend fetch_options -u
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- lappend fetch_options "${fetch.user}:${fetch.password}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set credentials ${fetch.user}:${fetch.password}
</span> }
if {${fetch.use_epsv} ne "yes"} {
lappend fetch_options "--disable-epsv"
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -547,7 +547,7 @@ proc portfetch::fetchfiles {args} {
</span> ui_notice "$UI_PREFIX [format [msgcat::mc "Attempting to fetch %s from %s"] $distfile $site]"
set file_url [portfetch::assemble_url $site $distfile]
macports_try -pass_signal {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- curl fetch {*}$fetch_options $file_url "${distpath}/${distfile}.TMP"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ curlwrap fetch $site $credentials {*}$fetch_options $file_url ${distpath}/${distfile}.TMP
</span> file rename -force "${distpath}/${distfile}.TMP" "${distpath}/${distfile}"
set fetched 1
break
</pre><pre style='margin:0'>
</pre>