# HG changeset patch # User František Kučera # Date 1556117957 -7200 # Node ID d7978ca64a2029fe347f0f29f27039da59199f59 # Parent 9353b2531cda3138e0a431239fb4842749eac10e do pull while submitting already configured repository diff -r 9353b2531cda -r d7978ca64a20 vcs-backup.sh --- a/vcs-backup.sh Tue Apr 23 17:56:16 2019 +0200 +++ b/vcs-backup.sh Wed Apr 24 16:59:17 2019 +0200 @@ -170,16 +170,13 @@ socat -u "unix-recv:${VCS_BACKUP_SUBVOLUME_SOCKET},group=${VCS_BACKUP_MANAGER},mode=770" - | while read d; do mkdir -p $(dirname "$VCS_BACKUP_CURRENT_DIR/$d"); if [[ -e "$VCS_BACKUP_CURRENT_DIR/$d" ]]; then - callBackSocket="$VCS_BACKUP_CONFIG_DIR/$d/$VCS_BACKUP_CLONE_CALLBACK_SOCKET"; - if [[ -e "$callBackSocket" ]]; then - echo "alreadyDone" | socat -u - unix-send:"$callBackSocket"; - fi + echo "cloned" > "$VCS_BACKUP_CONFIG_DIR/$d/state.txt"; else btrfs subvolume create "$VCS_BACKUP_CURRENT_DIR/$d" && \ echo "subvolumeCreated" > "$VCS_BACKUP_CONFIG_DIR/$d/state.txt" && \ - chown "${VCS_BACKUP_USER}:${VCS_BACKUP_USER}" "$VCS_BACKUP_CURRENT_DIR/$d" && \ - echo "$d" | socat -u - unix-send:${VCS_BACKUP_CLONE_SOCKET}; + chown "${VCS_BACKUP_USER}:${VCS_BACKUP_USER}" "$VCS_BACKUP_CURRENT_DIR/$d" fi + echo "$d" | socat -u - unix-send:${VCS_BACKUP_CLONE_SOCKET}; done } @@ -190,11 +187,20 @@ socat -u "unix-recv:${VCS_BACKUP_CLONE_SOCKET},mode=700" - | while read d; do vcsType=$(echo "$d" | sed 's@/.*@@g'); url=$(cat "$VCS_BACKUP_CONFIG_DIR/$d/url.txt"); + state=$(cat "$VCS_BACKUP_CONFIG_DIR/$d/state.txt"); if isValidTypeAndURL "$vcsType" "$url"; then - if [[ "$vcsType" == "hg" ]]; then hg clone -U "$url" "$VCS_BACKUP_CURRENT_DIR/$d"; - elif [[ "$vcsType" == "git" ]]; then git clone --mirror "$url" "$VCS_BACKUP_CURRENT_DIR/$d"; - fi && echo "cloned" > "$VCS_BACKUP_CONFIG_DIR/$d/state.txt"; + if [[ "$state" == "cloned" ]]; then + # Already cloned repository → just pull + if [[ "$vcsType" == "hg" ]]; then hg -R "$VCS_BACKUP_CURRENT_DIR/$d" pull; + elif [[ "$vcsType" == "git" ]]; then git -C "$VCS_BACKUP_CURRENT_DIR/$d" fetch; + fi + else + # New repository → clone + if [[ "$vcsType" == "hg" ]]; then hg clone -U "$url" "$VCS_BACKUP_CURRENT_DIR/$d"; + elif [[ "$vcsType" == "git" ]]; then git clone --mirror "$url" "$VCS_BACKUP_CURRENT_DIR/$d"; + fi && echo "cloned" > "$VCS_BACKUP_CONFIG_DIR/$d/state.txt"; + fi else echo "Unsupported VCS type: '$vcsType' or URL: '$url'" >&2; fi