Use "use warnings" rather than -w on the #! line.
[rsync/rsync-patches.git] / source-backup.diff
index ee1e263..38386fb 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:
 
@@ -10,17 +9,18 @@ To use this patch, run these commands for a successful build:
 
 -- Matt McCutchen <hashproduct@gmail.com>
 
---- old/options.c
-+++ new/options.c
-@@ -29,6 +29,7 @@ extern struct filter_list_struct filter_
- extern struct filter_list_struct server_filter_list;
+diff --git a/options.c b/options.c
+--- a/options.c
++++ b/options.c
+@@ -33,6 +33,7 @@ extern struct filter_list_struct filter_list;
+ extern struct filter_list_struct daemon_filter_list;
  
  int make_backups = 0;
 +int make_source_backups = 0;
  
  /**
   * If 1, send the whole file as literal data rather than trying to
-@@ -350,6 +351,7 @@ void usage(enum logcode F)
+@@ -368,6 +369,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 +28,27 @@ 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 },
+@@ -608,6 +610,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";
+@@ -1967,6 +1970,8 @@ void server_options(char **args, int *argc_p)
+                               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 
+diff --git a/rsync.yo b/rsync.yo
+--- a/rsync.yo
++++ b/rsync.yo
+@@ -365,6 +365,7 @@ to the detailed description below for a complete description.  verb(
       --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,24 +56,24 @@ 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
+@@ -1115,6 +1116,14 @@ dit(bf(--remove-source-files)) This tells rsync to remove from the sending
  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
  directories that are being synchronized.  You must have asked rsync to
---- old/sender.c
-+++ new/sender.c
+diff --git a/sender.c b/sender.c
+--- a/sender.c
++++ b/sender.c
 @@ -39,6 +39,7 @@ extern int protocol_version;
  extern int remove_source_files;
  extern int updating_basis_file;
@@ -90,7 +90,7 @@ To use this patch, run these commands for a successful build:
  
        if (!remove_source_files)
                return;
-@@ -139,7 +141,11 @@ void successful_send(int ndx)
+@@ -133,7 +135,11 @@ void successful_send(int ndx)
                return;
        f_name(file, fname);