A patch to try to make really large files get handled without bogging
[rsync/rsync-patches.git] / source-backup.diff
index ee1e263..0080839 100644 (file)
@@ -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