#!/bin/bash source /etc/de-p1st-repo/arch-repo.cfg || exit function main() { cd "${LOCAL_PKG_DIR}" || exit # check if at least one matching file exists match="0" for PKG in ./*.pkg.tar.{xz,zst}; do [ -f "$PKG" ] || { echo "There are no local packages for the pattern $PKG"; continue; } # if we are here, then there is at least one match! match="1" break done if [ "$match" = "0" ]; then echo "There are no local packages" exit 0 fi # Get list of new packages, one package per line. # Enable nullglob for the case that e.g. just *.zst but not *.xz packages exist. shopt -s nullglob rsync --ignore-existing --out-format="%n" --dry-run \ ./*.pkg.tar.{xz,zst} "${REMOTE_SSH_HOST}":"${REMOTE_PKG_DIR}" > new-pkg.txt || exit # if there are no new packages to push/synchronize, then exit if [ ! -s new-pkg.txt ]; then echo "No new packages."; exit 0; fi # transfer new packages using rsync rsync --ignore-existing --progress --human-readable \ ./*.pkg.tar.{xz,zst} "${REMOTE_SSH_HOST}":"${REMOTE_PKG_DIR}" || exit # transfer new-pkg.txt rsync --ignore-times --checksum --progress --human-readable \ new-pkg.txt "${REMOTE_SSH_HOST}":"${REMOTE_PKG_DIR}" || exit # add each new package to database ssh "${REMOTE_SSH_HOST}" "/usr/bin/arch-repo-receive-new" || exit } for LOCAL_PKG_DIR in "${LOCAL_PKG_DIRS[@]}"; do main done