summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2021-07-28 18:10:55 +0200
committerGitHub <noreply@github.com>2021-07-28 09:10:55 -0700
commitefc81c93a9fca45ba08119145a2d282f477f01b4 (patch)
tree33d74b2d4dd74b56f01c36b5d1adee08a36d6031
parent35d4f6737a57c88978b6e954506e9c73f8c10ccf (diff)
downloadrsync-efc81c93a9fca45ba08119145a2d282f477f01b4.tar.gz
Add test and fix regression for --delay-updates (#192) (#204)
Fixes regression introduced with commit 3a7bf54ad520 (A resumed partial-dir file is transferred in-place.)
-rw-r--r--receiver.c2
-rw-r--r--testsuite/delay-updates.test21
2 files changed, 22 insertions, 1 deletions
diff --git a/receiver.c b/receiver.c
index e85c4779..b5020d07 100644
--- a/receiver.c
+++ b/receiver.c
@@ -881,7 +881,7 @@ int recv_files(int f_in, int f_out, char *local_name)
do_unlink(partialptr);
handle_partial_dir(partialptr, PDIR_DELETE);
}
- } else if (keep_partial && partialptr && !one_inplace) {
+ } else if (keep_partial && partialptr && (!one_inplace || delay_updates)) {
if (!handle_partial_dir(partialptr, PDIR_CREATE)) {
rprintf(FERROR,
"Unable to create partial-dir for %s -- discarding %s.\n",
diff --git a/testsuite/delay-updates.test b/testsuite/delay-updates.test
new file mode 100644
index 00000000..5896a9c7
--- /dev/null
+++ b/testsuite/delay-updates.test
@@ -0,0 +1,21 @@
+#! /bin/sh
+
+# Test rsync --delay-updates
+
+. "$suitedir/rsync.fns"
+
+mkdir "$fromdir"
+
+echo 1 > "$fromdir/foo"
+
+checkit "$RSYNC -aiv --delay-updates \"$fromdir/\" \"$todir/\"" "$fromdir" "$todir"
+
+mkdir "$todir/.~tmp~"
+echo 2 > "$todir/.~tmp~/foo"
+touch -r .. "$todir/.~tmp~/foo" "$todir/foo"
+echo 3 > "$fromdir/foo"
+
+checkit "$RSYNC -aiv --delay-updates \"$fromdir/\" \"$todir/\"" "$fromdir" "$todir"
+
+# The script would have aborted on error, so getting here means we've won.
+exit 0