<pre style='margin:0'>
Joshua Root (jmroot) pushed a commit to branch master
in repository mpbb.
</pre>
<p><a href="https://github.com/macports/mpbb/commit/bf3bfbfa2a047340ace57ba03cb7a087fe8d8ce4">https://github.com/macports/mpbb/commit/bf3bfbfa2a047340ace57ba03cb7a087fe8d8ce4</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 bf3bfbf mpbb-gather-archives: granular license checking
</span>bf3bfbf is described below
<span style='display:block; white-space:pre;color:#808000;'>commit bf3bfbfa2a047340ace57ba03cb7a087fe8d8ce4
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Wed Jan 12 21:52:09 2022 +1100
<span style='display:block; white-space:pre;color:#404040;'> mpbb-gather-archives: granular license checking
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Check distributability separately for each installed version (i.e.
</span><span style='display:block; white-space:pre;color:#404040;'> variant combination) of the port.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Fixes: https://trac.macports.org/ticket/61768
</span>---
mpbb-gather-archives | 37 ++++-------------
tools/gather-archives.tcl | 104 ++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 111 insertions(+), 30 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/mpbb-gather-archives b/mpbb-gather-archives
</span><span style='display:block; white-space:pre;color:#808080;'>index 6d69128..9b06472 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/mpbb-gather-archives
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/mpbb-gather-archives
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -63,34 +63,11 @@ gather-archives() {
</span>
mkdir -p "${option_staging_dir}"/public "${option_staging_dir}"/private || return
<span style='display:block; white-space:pre;background:#ffe0e0;'>- status=0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- for archive_path in $("${option_prefix}/bin/port" -q location installed and \( $(cat "${option_work_dir}/requested_port") \)); do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- archive_port=$(basename "$(dirname "${archive_path}")")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- archive_basename=$(basename "${archive_path}")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # $option_jobs_dir is set in mpbb
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # shellcheck disable=SC2154
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if "${tclsh}" "${option_jobs_dir}/port_binary_distributable.tcl" -d "${option_license_db_dir}" -v "${archive_port}"; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- archive_type=public
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- archive_site="${option_archive_site}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- archive_type=private
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- archive_site="${option_archive_site_private}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- archive_dir="${option_staging_dir}/${archive_type}/${archive_port}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if ! curl -fIsL "${archive_site}/${archive_port}/${archive_basename}" > /dev/null; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- echo "Staging ${archive_type} archive for upload: ${archive_basename}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- mkdir -p "${archive_dir}" || { status=$?; break; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if [ "$(device-of-path "${archive_path}")" = "$(device-of-path "${archive_dir}")" ]; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ln "${archive_path}" "${archive_dir}/${archive_basename}" || { status=$?; break; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- cp -p "${archive_path}" "${archive_dir}/${archive_basename}" || { status=$?; break; }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- echo "Already uploaded ${archive_type} archive: ${archive_basename}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return $status
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # $thisdir is set in mpbb
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # shellcheck disable=SC2154
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "${tclsh}" "${thisdir}/tools/gather-archives.tcl" --archive_site_private "${option_archive_site_private}" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ --archive_site_public "${option_archive_site}" --jobs_dir "${option_jobs_dir}" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ --license_db_dir "${option_license_db_dir}" --staging_dir "${option_staging_dir}" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "${option_work_dir}/requested_port"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return $?
</span> }
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/tools/gather-archives.tcl b/tools/gather-archives.tcl
</span>new file mode 100755
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..d6f0e66
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/tools/gather-archives.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,104 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#!/usr/bin/env port-tclsh
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+package require macports
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+package require registry2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+package require fetch_common
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if {[catch {mportinit "" "" ""} result]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts stderr "$errorInfo"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ error "Failed to initialize ports system: $result"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set archive_site_private https://packages-private.macports.org
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set archive_site_public https://packages.macports.org
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set jobs_dir ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set license_db_dir ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set staging_dir ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+while {[string range [lindex $::argv 0] 0 1] eq "--"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ switch -- [lindex $::argv 0] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ --archive_site_private {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set archive_site_private [lindex $::argv 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ::argv [lreplace $::argv 0 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ --archive_site_public {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set archive_site_public [lindex $::argv 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ::argv [lreplace $::argv 0 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ --jobs_dir {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set jobs_dir [lindex $::argv 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ::argv [lreplace $::argv 0 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ --license_db_dir {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set license_db_dir [lindex $::argv 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ::argv [lreplace $::argv 0 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ --staging_dir {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set staging_dir [lindex $::argv 1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ::argv [lreplace $::argv 0 0]
</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;'>+ error "unknown option: [lindex $::argv 0]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ::argv [lreplace $::argv 0 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if {$staging_dir eq ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ error "must specify --staging_dir"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if {$jobs_dir eq ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ error "must specify --jobs_dir"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if {[llength $::argv] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ error "must specify an input file"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+source ${jobs_dir}/distributable_lib.tcl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if {$license_db_dir ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ init_license_db $license_db_dir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+file stat $staging_dir stat_array
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set staging_device $stat_array(dev)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set infd [open [lindex $::argv 0] r]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+while {[gets $infd line] >= 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set portname [lindex [split $line] 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach e [registry::entry imaged $portname] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set requested_variations [split_variants [$e requested_variants]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lassign [check_licenses [$e name] $requested_variations] license_result license_reason
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts $license_reason
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$license_result == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set archive_type public
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set archive_site $archive_site_public
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set archive_type private
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set archive_site $archive_site_private
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set archive_path [$e location]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set archive_basename [file tail $archive_path]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set archive_name_encoded [portfetch::percent_encode $archive_basename]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![catch {curl getsize ${archive_site}/[$e name]/${archive_name_encoded}} size] && $size > 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts "Already uploaded ${archive_type} archive: ${archive_basename}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ continue
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts "Staging ${archive_type} archive for upload: ${archive_basename}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set archive_staging_dir [file join ${staging_dir} ${archive_type} [$e name]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ file mkdir $archive_staging_dir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ file stat $archive_path stat_array
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$stat_array(dev) == $staging_device} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ file link -hard [file join $archive_staging_dir $archive_basename] $archive_path
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ file copy -force $archive_path $archive_staging_dir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if {$license_db_dir ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ write_license_db $license_db_dir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+exit 0
</span></pre><pre style='margin:0'>
</pre>