diff -r d46ed3f5c72b -r 7bdf24cc2e9e vcs-backup.sh --- a/vcs-backup.sh Sun Apr 21 00:05:19 2019 +0200 +++ b/vcs-backup.sh Sun Apr 21 21:49:35 2019 +0200 @@ -106,7 +106,6 @@ echo "submited" > "$absolutePath/state.txt" setfacl -m u:${VCS_BACKUP_USER}:r "$absolutePath/url.txt" setfacl -m u:${VCS_BACKUP_USER}:rw "$absolutePath/state.txt" - echo "$relativePath" | socat -u - unix-send:${VCS_BACKUP_SUBVOLUME_SOCKET}; if [[ "$3" == "public" ]]; then cd "$VCS_BACKUP_PUBLIC_DIR"; @@ -115,9 +114,18 @@ fi if [[ "$4" == "clone" ]]; then - socat -u "unix-recvfrom:$absolutePath/${VCS_BACKUP_CLONE_CALLBACK_SOCKET},mode=777" - | while read m; do # TODO: ,group=${VCS_BACKUP_USER} and no 777 - echo "Message from the clone service: $m"; - done; + callBackSocket=$absolutePath/${VCS_BACKUP_CLONE_CALLBACK_SOCKET} + socat -u "unix-recvfrom:$callBackSocket,mode=777" - | while read m; do # TODO: ,group=${VCS_BACKUP_USER} and no 777 ? + echo "Message from the service: $m"; + done & + callBackPID=$!; + fi + + echo "$relativePath" | socat -u - unix-send:${VCS_BACKUP_SUBVOLUME_SOCKET}; + + if [[ "$4" == "clone" ]]; then + echo "Waiting for a message from the service on $callBackSocket (PID $callBackPID)"; + wait -n $callBackPID; fi else echo "Unsupported VCS type: '$1' or URL: '$2'" >&2; @@ -133,10 +141,17 @@ vcs_backup_public_serverStartSubvolumeService() { 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"); - 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}; + 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 + 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}; + fi done }