#!/bin/bash

source /etc/de-p1st-repo/arch-repo.cfg || exit $?
# Enable nullglob for the case that not all patterns match, e.g. just *.zst but not *.xz packages exist.
shopt -s nullglob

function main() {
  cd "${LOCAL_PKG_DIR}" || return $?

  # Check if at least one matching file exists
  match="0"
  for PKG in ./*.pkg.tar.{xz,zst}; do
      # There is at least one match!
      match="1"
      break
  done

  if [ "$match" = "0" ]; then
    echo "There are no local packages inside ${LOCAL_PKG_DIR}"
    return 0
  fi


  # Get list of new packages, one package per line.
  rsync --ignore-existing --out-format="%n" --dry-run \
    ./*.pkg.tar.{xz,zst} "${REMOTE_SSH_HOST}":"${REMOTE_PKG_DIR}" > new-pkg.txt || return $?

  # If there are no new packages to push/synchronize, then return
  if [ ! -s new-pkg.txt ]; then
    echo "No new packages inside ${LOCAL_PKG_DIR}";
    return 0;
  fi


  # Transfer new packages using rsync
  rsync --ignore-existing --progress --human-readable \
    ./*.pkg.tar.{xz,zst} "${REMOTE_SSH_HOST}":"${REMOTE_PKG_DIR}" || return $?

  # Transfer new-pkg.txt
  rsync --ignore-times --checksum --progress --human-readable \
    new-pkg.txt "${REMOTE_SSH_HOST}":"${REMOTE_PKG_DIR}" || return $?


  # Add each new package to database
  ssh "${REMOTE_SSH_HOST}" "/usr/bin/arch-repo-receive-new" || return $?
}


for LOCAL_PKG_DIR in "${LOCAL_PKG_DIRS[@]}"; do
  main
done