target="/repo"
lock="/var/lock/syncrepo.lock"

bwlimit=0

source_url='rsync://ftp.halifax.rwth-aachen.de/archlinux/'

lastupdate_url='rsync://ftp.halifax.rwth-aachen.de/archlinux/lastupdate'

[ ! -d "${target}" ] && mkdir -p ${target}

exec 9>"${lock}"
flock -n 9 || exit

find "${target}" -name '.~tmp~' -exec rm -r {} +

rsync_cmd() {
        local -a cmd=(rsync -rlptH --safe-links --delete-delay --delay-updates
                "--timeout=600" "--contimeout=60" --no-motd)

        if stty &>/dev/null; then
                cmd+=(-h -v --progress)
        else
                cmd+=(--quiet)
        fi

        if ((bwlimit>0)); then
                cmd+=("--bwlimit=${bwlimit}")
        fi

        "${cmd[@]}" "$@"
}

if ! tty -s && [[ -f "$target/lastupdate" ]] && diff -b <(curl -Ls "$lastupdate_url") "$target/lastupdate" >/dev/null; then
        rsync_cmd "$source_url/lastsync" "$target/lastsync"
        exit 0
fi

rsync_cmd \
        --exclude='*.links.tar.gz*' \
        "${source_url}" \
        "${target}"
