<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>