From 407dbbc965a971ad28653b9f5895790b4c395006 Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Sun, 16 Aug 2026 10:52:27 +0200 Subject: [PATCH] add origin delete mode with rsync --- src/restore | 16 ++++++++++------ tests/restore_tests.bats | 34 +++++++++++++++++++++++++++++++--- 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/src/restore b/src/restore index eda116d..a52acf7 100755 --- a/src/restore +++ b/src/restore @@ -126,19 +126,22 @@ restore() [ "$host" == "localhost" ] && hostpath="$path" echo "ℹ️ INFO: remote path $hostpath" - ask_restore "❓ QUESTION: Do you want restore? [N/y]" \ - || return $? - rsyncargs=("--archive" "--verbose" "--sparse" "--acls" "--hard-links" - "--human-readable" - "--rsh=ssh -p $port" + "--human-readable") + [ "$origin" == "ON" ] \ + && echo "⚠️ WARN: DELETE MODE IS ON" \ + && rsyncargs+=("--delete") + rsyncargs+=("--rsh=ssh -p $port" "${backup_path}/${backup_dir}/${machine}${path}" "$hostpath") + ask_restore "❓ QUESTION: Do you want restore? [N/y]" \ + || return $? + rsync "${rsyncargs[@]}" \ || errlog "could not restore" \ || return $? @@ -164,13 +167,14 @@ main() local number= local machine= local path= + local origin="OFF" while getopts "d:n:r:p:ho" optname; do case "$optname" in "d") date="$OPTARG" ;; "n") number="$OPTARG" ;; "r") machine="$OPTARG" ;; "p") path="$OPTARG" ;; - "o") origin="deletemode-on" ;; + "o") origin="ON" ;; "h") useage && return 0 ;; *) usage && return 0 ;; esac diff --git a/tests/restore_tests.bats b/tests/restore_tests.bats index 1fa3283..ccb8b5b 100755 --- a/tests/restore_tests.bats +++ b/tests/restore_tests.bats @@ -407,7 +407,6 @@ teardown() { assert_success assert_line --index 0 "⭐ START: restore" - assert_line --index 0 "⭐ START: restore" assert_line --index 1 "ℹ️ INFO: backup path build/test" assert_line --index 2 "ℹ️ INFO: backup name backup" assert_line --index 3 "ℹ️ INFO: restore mode file" @@ -438,7 +437,6 @@ teardown() { assert_failure assert_line --index 0 "⭐ START: restore" - assert_line --index 0 "⭐ START: restore" assert_line --index 1 "ℹ️ INFO: backup path build/test" assert_line --index 2 "ℹ️ INFO: backup name backup" assert_line --index 3 "ℹ️ INFO: restore mode file" @@ -446,4 +444,34 @@ teardown() { assert_line --index 5 "ℹ️ INFO: remote path backupuser@www.example.com:/testpath" assert_line --index 6 "❓ QUESTION: Do you want restore? [N/y]" assert_line --index 7 "❌ ERROR: could not restore" -} \ No newline at end of file +} + +# bats test_tags=restore:rsync, restore:origin +@test "success backup machine path rsync parameter delete" { + mkdir --parents "build/test/2000-01-01_01_backup/testpc1.example.com/testpath" + RSYNC_LOG_RUNS="1" + + run main -d "2000-01-01" -n "01" -r "testpc1.example.com" -p "/testpath" -o + + assert_success + assert_line --index 0 "⭐ START: restore" + assert_line --index 1 "ℹ️ INFO: backup path build/test" + assert_line --index 2 "ℹ️ INFO: backup name backup" + assert_line --index 3 "ℹ️ INFO: restore mode file" + assert_line --index 4 "ℹ️ INFO: restore path build/test/2000-01-01_01_backup/testpc1.example.com/testpath" + assert_line --index 5 "ℹ️ INFO: remote path backupuser@www.example.com:/testpath" + assert_line --index 6 "⚠️ WARN: DELETE MODE IS ON" + assert_line --index 7 "❓ QUESTION: Do you want restore? [N/y]" + assert_line --index 8 "✅ SUCCESS: restore" + assert_equal "$(awk 'NR==1 {print; exit}' "$RSYNC_LOG")" "10" + assert_equal "$(awk 'NR==2 {print; exit}' "$RSYNC_LOG")" "--archive" + assert_equal "$(awk 'NR==3 {print; exit}' "$RSYNC_LOG")" "--verbose" + assert_equal "$(awk 'NR==4 {print; exit}' "$RSYNC_LOG")" "--sparse" + assert_equal "$(awk 'NR==5 {print; exit}' "$RSYNC_LOG")" "--acls" + assert_equal "$(awk 'NR==6 {print; exit}' "$RSYNC_LOG")" "--hard-links" + assert_equal "$(awk 'NR==7 {print; exit}' "$RSYNC_LOG")" "--human-readable" + assert_equal "$(awk 'NR==8 {print; exit}' "$RSYNC_LOG")" "--delete" + assert_equal "$(awk 'NR==9 {print; exit}' "$RSYNC_LOG")" "--rsh=ssh -p 22" + assert_equal "$(awk 'NR==10 {print; exit}' "$RSYNC_LOG")" "build/test/2000-01-01_01_backup/testpc1.example.com/testpath" + assert_equal "$(awk 'NR==11 {print; exit}' "$RSYNC_LOG")" "backupuser@www.example.com:/testpath" +} -- 2.47.3