X-Git-Url: https://mattmccutchen.net/rsync/rsync-patches.git/blobdiff_plain/06dba0173956fcdd508394f2dce59ec6b7b987f6..f264662f71d65a8addc50d3ee0372d82c903bf2a:/source-backup.diff diff --git a/source-backup.diff b/source-backup.diff index ee1e263..0080839 100644 --- a/source-backup.diff +++ b/source-backup.diff @@ -1,6 +1,5 @@ -This patch to rsync 2.6.9 adds a --source-backup option that backs up source -files removed due to --remove-source-files. In my limited testing, it seems -to work. +This patch adds a --source-backup option that backs up source files +removed due to --remove-source-files. To use this patch, run these commands for a successful build: @@ -20,7 +19,7 @@ To use this patch, run these commands for a successful build: /** * If 1, send the whole file as literal data rather than trying to -@@ -350,6 +351,7 @@ void usage(enum logcode F) +@@ -352,6 +353,7 @@ void usage(enum logcode F) rprintf(F," --existing skip creating new files on receiver\n"); rprintf(F," --ignore-existing skip updating files that already exist on receiver\n"); rprintf(F," --remove-source-files sender removes synchronized files (non-dirs)\n"); @@ -28,27 +27,26 @@ To use this patch, run these commands for a successful build: rprintf(F," --del an alias for --delete-during\n"); rprintf(F," --delete delete extraneous files from destination dirs\n"); rprintf(F," --delete-before receiver deletes before transfer, not during\n"); -@@ -559,6 +561,7 @@ static struct poptOption long_options[] - {"itemize-changes", 'i', POPT_ARG_NONE, 0, 'i', 0, 0 }, +@@ -573,6 +575,7 @@ static struct poptOption long_options[] {"bwlimit", 0, POPT_ARG_INT, &bwlimit, 0, 0, 0 }, - {"backup", 'b', POPT_ARG_NONE, &make_backups, 0, 0, 0 }, + {"no-bwlimit", 0, POPT_ARG_VAL, &bwlimit, 0, 0, 0 }, + {"backup", 'b', POPT_ARG_VAL, &make_backups, 1, 0, 0 }, + {"source-backup", 0, POPT_ARG_NONE, &make_source_backups, 0, 0, 0}, + {"no-backup", 0, POPT_ARG_VAL, &make_backups, 0, 0, 0 }, {"backup-dir", 0, POPT_ARG_STRING, &backup_dir, 0, 0, 0 }, {"suffix", 0, POPT_ARG_STRING, &backup_suffix, 0, 0, 0 }, - {"list-only", 0, POPT_ARG_VAL, &list_only, 2, 0, 0 }, -@@ -1820,7 +1823,8 @@ void server_options(char **args,int *arg - args[ac++] = "--super"; - if (size_only) - args[ac++] = "--size-only"; -- } -+ } else if (make_source_backups) -+ args[ac++] = "--source-backup"; +@@ -1848,6 +1851,8 @@ void server_options(char **args,int *arg + goto oom; + args[ac++] = arg; + } ++ if (make_source_backups) ++ args[ac++] = "--source-backup"; + } if (modify_window_set) { - if (asprintf(&arg, "--modify-window=%d", modify_window) < 0) --- old/rsync.yo +++ new/rsync.yo -@@ -344,6 +344,7 @@ to the detailed description below for a +@@ -350,6 +350,7 @@ to the detailed description below for a --existing skip creating new files on receiver --ignore-existing skip updating files that exist on receiver --remove-source-files sender removes synchronized files (non-dir) @@ -56,18 +54,17 @@ To use this patch, run these commands for a successful build: --del an alias for --delete-during --delete delete extraneous files from dest dirs --delete-before receiver deletes before transfer (default) -@@ -998,6 +999,15 @@ dit(bf(--remove-source-files)) This tell +@@ -1012,6 +1013,14 @@ dit(bf(--remove-source-files)) This tell side the files (meaning non-directories) that are a part of the transfer and have been successfully duplicated on the receiving side. +dit(bf(--source-backup)) Makes the sender back up the source files it removes +due to bf(--remove-source-files). This option is independent of +bf(--backup) but uses the same bf(--backup-dir) and bf(--suffix) settings, -+if any. With bf(--backup-dir), each backup file is placed inside the backup -+dir according to the source file's full path from the working directory -+(source argument path + file-list path); if you want files placed according -+to the file-list path, you could either make appropriate symlinks or have the -+sender "cd" into the source directory so that the source argument is just ".". ++if any. With bf(--backup-dir), rsync looks for each file's backup dir relative ++to the source argument the file came from. Consequently, if the ++bf(--backup-dir) path is relative, each source argument gets a separate backup ++dir at that path relative to the argument. + dit(bf(--delete)) This tells rsync to delete extraneous files from the receiving side (ones that aren't on the sending side), but only for the