<pre style='margin:0'>
Joshua Root (jmroot) pushed a commit to branch master
in repository macports-infrastructure.

</pre>
<p><a href="https://github.com/macports/macports-infrastructure/commit/86ed09c6348e921bdcf39c58ca109a3ee459a501">https://github.com/macports/macports-infrastructure/commit/86ed09c6348e921bdcf39c58ca109a3ee459a501</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 86ed09c6348e921bdcf39c58ca109a3ee459a501
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Thu Mar 27 02:21:50 2025 +1100

<span style='display:block; white-space:pre;color:#404040;'>    mprsyncup-alt: skip updating ports if no new upload
</span>---
 jobs/mprsyncup-alt | 140 ++++++++++++++++++++++++++++-------------------------
 1 file changed, 75 insertions(+), 65 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/jobs/mprsyncup-alt b/jobs/mprsyncup-alt
</span><span style='display:block; white-space:pre;color:#808080;'>index fba6a40..aea6f8b 100755
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/jobs/mprsyncup-alt
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/jobs/mprsyncup-alt
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -36,8 +36,6 @@ if [ -z "$PRIVKEY" ]; then
</span>     exit 1
 fi
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-HOSTOS="$(uname -s)"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> BASEDIR=$(pwd)
 
 rm -rf "${BASEDIR}/rsyncroot"
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -86,73 +84,85 @@ fi
</span> # Prepare ports tree and PortIndex dirs
 
 LATEST_PORTS_UPLOAD="$(ls -1t "${MIRROR_UPLOAD_PATH}"/portindex-*.tar.bz2 | head -n1)"
<span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Clean up older uploads
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "Cleaning up old ports uploads"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-find "${MIRROR_UPLOAD_PATH}" -type f -name "portindex-*.tar.bz2" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    -not -newer "$LATEST_PORTS_UPLOAD" -not -samefile "$LATEST_PORTS_UPLOAD" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    -delete -printf "Deleted %f\n"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -rf "${BASEDIR}/rsyncroot/release/tarballs/extract"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-mkdir -p "${BASEDIR}/rsyncroot/release/tarballs/extract"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "Extracting latest ports"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-"$TAR" -C "${BASEDIR}/rsyncroot/release/tarballs/extract" -xjf "$LATEST_PORTS_UPLOAD"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Create ports.tar
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "Creating release/tarballs/ports.tar(.gz)"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f "${BASEDIR}/rsyncroot/release/tarballs/ports.tar" "${BASEDIR}/rsyncroot/release/tarballs/ports.tar.gz"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-"$TAR" -C "${BASEDIR}/rsyncroot/release/tarballs/extract" -cf "${BASEDIR}/rsyncroot/release/tarballs/ports.tar" ports
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-"$GZIP" --best --keep --rsyncable "${BASEDIR}/rsyncroot/release/tarballs/ports.tar"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Create daily tarball
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "Creating daily tarball"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -f "${BASEDIR}/rsyncroot/distfiles/ports.tar.gz" "${BASEDIR}/rsyncroot/release/ports.tar.gz"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-mkdir -p "${BASEDIR}/rsyncroot/distfiles"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-mv "${BASEDIR}"/rsyncroot/release/tarballs/extract/PortIndex* "${BASEDIR}"/rsyncroot/release/tarballs/extract/ports
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-"$TAR" -C "${BASEDIR}/rsyncroot/release/tarballs/extract" --exclude 'PortIndex*/PortIndex.json' \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    -c --use-compress-program "$GZIP --best --rsyncable" -f "${BASEDIR}/rsyncroot/release/ports.tar.gz" ports
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-ln "${BASEDIR}/rsyncroot/release/ports.tar.gz" "${BASEDIR}/rsyncroot/distfiles/ports.tar.gz"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Put PortIndex dirs in place
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "Moving PortIndex dirs"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-mv "${BASEDIR}"/rsyncroot/release/tarballs/extract/ports/PortIndex* "${BASEDIR}"/rsyncroot/release/tarballs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "Deleting temp extracted ports tree"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-rm -rf "${BASEDIR}/rsyncroot/release/tarballs/extract"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Sign files
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-for f in "${BASEDIR}"/rsyncroot/release/tarballs/ports.tar{,.gz} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         "${BASEDIR}"/rsyncroot/release/tarballs/PortIndex*/PortIndex\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         "${BASEDIR}"/rsyncroot/{release,distfiles}/ports.tar.gz; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "Signing $f"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    "$OPENSSL" dgst -ripemd160 -sign "${PRIVKEY}" -out "${f}.rmd160" "${f}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-done
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Ensure readability
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "Setting permissions"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-chmod -R a+rX "${BASEDIR}/rsyncroot"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Stop rsyncd once there are no connections
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if [ "$HOSTOS" = "Linux" ]; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    WAITED=0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "Waiting for rsyncd to be idle"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    while [ -n "$(ss -H 'sport = :rsync')" ]; do
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        sleep 10
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        WAITED=$(( $WAITED + 10 ))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if [ "$WAITED" -ge 7200 ]; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            echo "Waited $(( $WAITED / 60 )) minutes for rsync connections to close, shutting down anyway"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        fi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+NEW_PORTS=0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if [ ! -f "${BASEDIR}/last_deployed_ports" -o \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "$(basename "$LATEST_PORTS_UPLOAD")" != "$(cat "${BASEDIR}/last_deployed_ports")" ]; then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Clean up older uploads
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    echo "Cleaning up old ports uploads"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    find "${MIRROR_UPLOAD_PATH}" -type f -name "portindex-*.tar.bz2" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        -not -newer "$LATEST_PORTS_UPLOAD" -not -samefile "$LATEST_PORTS_UPLOAD" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        -delete -printf "Deleted %f\n"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    rm -rf "${BASEDIR}/rsyncroot/release/tarballs/extract"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    mkdir -p "${BASEDIR}/rsyncroot/release/tarballs/extract"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    echo "Extracting latest ports"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    "$TAR" -C "${BASEDIR}/rsyncroot/release/tarballs/extract" -xjf "$LATEST_PORTS_UPLOAD"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Create ports.tar
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    echo "Creating release/tarballs/ports.tar(.gz)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    rm -f "${BASEDIR}/rsyncroot/release/tarballs/ports.tar" "${BASEDIR}/rsyncroot/release/tarballs/ports.tar.gz"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    "$TAR" -C "${BASEDIR}/rsyncroot/release/tarballs/extract" -cf "${BASEDIR}/rsyncroot/release/tarballs/ports.tar" ports
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    "$GZIP" --best --keep --rsyncable "${BASEDIR}/rsyncroot/release/tarballs/ports.tar"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Create daily tarball
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    echo "Creating daily tarball"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    rm -f "${BASEDIR}/rsyncroot/distfiles/ports.tar.gz" "${BASEDIR}/rsyncroot/release/ports.tar.gz"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    mkdir -p "${BASEDIR}/rsyncroot/distfiles"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    mv "${BASEDIR}"/rsyncroot/release/tarballs/extract/PortIndex* "${BASEDIR}"/rsyncroot/release/tarballs/extract/ports
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    "$TAR" -C "${BASEDIR}/rsyncroot/release/tarballs/extract" --exclude 'PortIndex*/PortIndex.json' \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        -c --use-compress-program "$GZIP --best --rsyncable" -f "${BASEDIR}/rsyncroot/release/ports.tar.gz" ports
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    ln "${BASEDIR}/rsyncroot/release/ports.tar.gz" "${BASEDIR}/rsyncroot/distfiles/ports.tar.gz"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Put PortIndex dirs in place
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    echo "Moving PortIndex dirs"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    mv "${BASEDIR}"/rsyncroot/release/tarballs/extract/ports/PortIndex* "${BASEDIR}"/rsyncroot/release/tarballs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    echo "Deleting temp extracted ports tree"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    rm -rf "${BASEDIR}/rsyncroot/release/tarballs/extract"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Sign files
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    for f in "${BASEDIR}"/rsyncroot/release/tarballs/ports.tar{,.gz} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             "${BASEDIR}"/rsyncroot/release/tarballs/PortIndex*/PortIndex\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             "${BASEDIR}"/rsyncroot/{release,distfiles}/ports.tar.gz; do
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        echo "Signing $f"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "$OPENSSL" dgst -ripemd160 -sign "${PRIVKEY}" -out "${f}.rmd160" "${f}"
</span>     done
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "Stopping rsyncd"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sudo /usr/bin/systemctl stop rsync
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    echo "$(basename "$LATEST_PORTS_UPLOAD")" > "${BASEDIR}/last_deployed_ports"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    NEW_PORTS=1
</span> fi
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# Sync files
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-echo "Rsyncing files"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-"$RSYNC" -aHv "${BASEDIR}"/rsyncroot/ "$MIRROR_PUBLIC_PATH"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if [ "$NEW_BASE" = 1 -o "$NEW_PORTS" = 1 ]; then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Ensure readability
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    echo "Setting permissions"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    chmod -R a+rX "${BASEDIR}/rsyncroot"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    HOSTOS="$(uname -s)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Stop rsyncd once there are no connections
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if [ "$HOSTOS" = "Linux" ]; then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        WAITED=0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        echo "Waiting for rsyncd to be idle"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        while [ -n "$(ss -H 'sport = :rsync')" ]; do
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            sleep 10
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            WAITED=$(( $WAITED + 10 ))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if [ "$WAITED" -ge 7200 ]; then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                echo "Waited $(( $WAITED / 60 )) minutes for rsync connections to close, shutting down anyway"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                break
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            fi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        done
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        echo "Stopping rsyncd"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        sudo /usr/bin/systemctl stop rsync
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    fi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Sync files
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    echo "Rsyncing files"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    "$RSYNC" -aHv "${BASEDIR}"/rsyncroot/ "$MIRROR_PUBLIC_PATH"
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# Start rsyncd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-if [ "$HOSTOS" = "Linux" ]; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    echo "Starting rsyncd"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sudo /usr/bin/systemctl start rsync
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Start rsyncd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if [ "$HOSTOS" = "Linux" ]; then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        echo "Starting rsyncd"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        sudo /usr/bin/systemctl start rsync
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    fi
</span> fi
 
 echo "Finished update of rsync files at $(date -u -Iseconds)"
</pre><pre style='margin:0'>

</pre>