The patches for 3.2.7pre1.
[rsync-patches.git] / source-backup.diff
index fffb829443fc7c2e3e8e4cf9b509ff25b22d8288..4b45396166998459a8aca3fcb64cc4ecbe54fe13 100644 (file)
@@ -9,11 +9,11 @@ To use this patch, run these commands for a successful build:
 
 -- Matt McCutchen <hashproduct@gmail.com>
 
-based-on: a3377921ebe651cb7d2b969853cb9fe0e135ff75
+based-on: ed4b3448be243b1bdb30a5da811f1e217f5a0601
 diff --git a/options.c b/options.c
 --- a/options.c
 +++ b/options.c
-@@ -35,6 +35,7 @@ extern filter_rule_list filter_list;
+@@ -34,6 +34,7 @@ extern filter_rule_list filter_list;
  extern filter_rule_list daemon_filter_list;
  
  int make_backups = 0;
@@ -21,15 +21,7 @@ diff --git a/options.c b/options.c
  
  /**
   * If 1, send the whole file as literal data rather than trying to
-@@ -796,6 +797,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");
-+  rprintf(F,"     --source-backup         ... and backs up those files\n");
-   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");
-@@ -1074,6 +1076,7 @@ static struct poptOption long_options[] = {
+@@ -776,6 +777,7 @@ static struct poptOption long_options[] = {
    {"bwlimit",          0,  POPT_ARG_STRING, &bwlimit_arg, OPT_BWLIMIT, 0, 0 },
    {"no-bwlimit",       0,  POPT_ARG_VAL,    &bwlimit, 0, 0, 0 },
    {"backup",          'b', POPT_ARG_VAL,    &make_backups, 1, 0, 0 },
@@ -37,39 +29,40 @@ diff --git a/options.c b/options.c
    {"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 },
-@@ -2859,6 +2862,8 @@ void server_options(char **args, int *argc_p)
-                               goto oom;
-                       args[ac++] = arg;
-               }
+@@ -2818,6 +2820,8 @@ void server_options(char **args, int *argc_p)
+       } else {
+               if (skip_compress)
+                       args[ac++] = safe_arg("--skip-compress", skip_compress);
 +              if (make_source_backups)
 +                      args[ac++] = "--source-backup";
        }
  
-       /* --delete-missing-args needs the cooperation of both sides, but
+       if (max_alloc_arg && max_alloc != DEFAULT_MAX_ALLOC)
 diff --git a/rsync.1.md b/rsync.1.md
 --- a/rsync.1.md
 +++ b/rsync.1.md
-@@ -386,6 +386,7 @@ detailed description below for a complete description.
- --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)
-+--source-backup             ... and backs up those files
- --del                       an alias for --delete-during
- --delete                    delete extraneous files from dest dirs
- --delete-before             receiver deletes before xfer, not during
-@@ -1561,6 +1562,16 @@ your home directory (remove the '=' for that).
-     Starting with 3.1.0, rsync will skip the sender-side removal (and output an
-     error) if the file's size or modify time has not stayed unchanged.
+@@ -441,6 +441,7 @@ has its own detailed description later in this manpage.
+ --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)
++--source-backup          ... and backs up those files
+ --del                    an alias for --delete-during
+ --delete                 delete extraneous files from dest dirs
+ --delete-before          receiver deletes before xfer, not during
+@@ -1841,6 +1842,17 @@ expand it.
+     not remove a file the receiver just verified, such as when the user
+     accidentally makes the source and destination directory the same path.
  
 +0.  `--source-backup`
 +
 +    Makes the sender back up the source files it removes due to
-+    `--remove-source-files`.  This option is independent of `--backup` but uses
-+    the same `--backup-dir` and `--suffix` settings, if any.  With
-+    `--backup-dir`, rsync looks for each file's backup dir relative to the
-+    source argument the file came from.  Consequently, if the `--backup-dir`
-+    path is relative, each source argument gets a separate backup dir at that
-+    path relative to the argument.
++    [`--remove-source-files`](#opt).  This option is independent of
++    [`--backup`](#opt) but uses the same [`--backup-dir`](#opt) and
++    [`--suffix`](#opt) settings, if any.  With [`--backup-dir`](#opt), rsync
++    looks for each file's backup dir relative to the source argument the file
++    came from.  Consequently, if the [`--backup-dir`](#opt) path is relative,
++    each source argument gets a separate backup dir at that path relative to
++    the argument.
 +
  0.  `--delete`
  
@@ -77,7 +70,7 @@ diff --git a/rsync.1.md b/rsync.1.md
 diff --git a/sender.c b/sender.c
 --- a/sender.c
 +++ b/sender.c
-@@ -41,6 +41,7 @@ extern int protocol_version;
+@@ -44,6 +44,7 @@ extern int protocol_version;
  extern int remove_source_files;
  extern int updating_basis_file;
  extern int make_backups;
@@ -93,7 +86,7 @@ diff --git a/sender.c b/sender.c
  
        if (!remove_source_files)
                return;
-@@ -155,7 +157,11 @@ void successful_send(int ndx)
+@@ -162,7 +164,11 @@ void successful_send(int ndx)
                return;
        }