Fixed failing hunks.
authorWayne Davison <wayned@samba.org>
Fri, 28 Jan 2005 19:36:25 +0000 (19:36 +0000)
committerWayne Davison <wayned@samba.org>
Fri, 28 Jan 2005 19:36:25 +0000 (19:36 +0000)
backup-dir-dels.diff
date-only.diff
fname-convert.diff
fuzzy.diff
link-by-hash.diff
links-depth.diff
time-limit.diff

index 0c17fec..be7f3c0 100644 (file)
@@ -1,12 +1,11 @@
 This patches creates two new command line options as follows:
-       --delete-dir
-       --delete-suffix
+       --backup-dir-rm
+       --backup-suffix-rm=SUFFIX
 
-The delete-dir and delete-suffix options give the ability to store 
-backup of deleted files on the receiver in different directories
-or with different suffix than the backup of files that have been
-changed but that are still on the source drive.  Both commands can
-be combined.
+The backup-dir-rm and backup-suffix-rm options give the ability to store
+backup of removed files on the receiver in different directories or with
+different suffix than the backup of files that have been changed but that
+are still on the source drive.  Both commands can be combined.
 
 The default behaviour if one or both of the options are not specified
 is the previous behaviour, both backups use the same directory or
@@ -20,17 +19,17 @@ Marc St-Onge
  
  extern int verbose;
  extern int backup_suffix_len;
-+extern int delete_suffix_len;
++extern int backup_suffix_rm_len;
  extern int backup_dir_len;
-+extern int delete_dir_len;
++extern int backup_dir_rm_len;
  extern unsigned int backup_dir_remainder;
-+extern unsigned int delete_dir_remainder;
++extern unsigned int backup_dir_rm_remainder;
  extern char backup_dir_buf[MAXPATHLEN];
-+extern char delete_dir_buf[MAXPATHLEN];
++extern char backup_dir_rm_buf[MAXPATHLEN];
  extern char *backup_suffix;
-+extern char *delete_suffix;
++extern char *backup_suffix_rm;
  extern char *backup_dir;
-+extern char *delete_dir;
++extern char *backup_dir_rm;
  
  extern int am_root;
  extern int preserve_devices;
@@ -49,14 +48,14 @@ Marc St-Onge
  
 +static char *get_delete_name(char *fname)
 +{
-+      if (delete_dir) {
-+              if (stringjoin(delete_dir_buf + delete_dir_len, delete_dir_remainder,
-+                             fname, delete_suffix, NULL) < delete_dir_remainder)
-+                      return delete_dir_buf;
++      if (backup_dir_rm) {
++              if (stringjoin(backup_dir_rm_buf + backup_dir_rm_len, backup_dir_rm_remainder,
++                             fname, backup_suffix_rm, NULL) < backup_dir_rm_remainder)
++                      return backup_dir_rm_buf;
 +      } else {
-+              if (stringjoin(delete_dir_buf, MAXPATHLEN,
-+                             fname, delete_suffix, NULL) < MAXPATHLEN)
-+                      return delete_dir_buf;
++              if (stringjoin(backup_dir_rm_buf, MAXPATHLEN,
++                             fname, backup_suffix_rm, NULL) < MAXPATHLEN)
++                      return backup_dir_rm_buf;
 +      }
 +
 +      rprintf(FERROR, "delete filename too long\n");
@@ -77,7 +76,7 @@ Marc St-Onge
  {
        STRUCT_STAT st;
 -      char *rel = fullpath + backup_dir_len;
-+      int dir_len = deleting ? delete_dir_len : backup_dir_len;
++      int dir_len = deleting ? backup_dir_rm_len : backup_dir_len;
 +      char *rel = fullpath + dir_len;
        char *end = rel + strlen(rel);
        char *p = end;
@@ -97,7 +96,7 @@ Marc St-Onge
        return make_simple_backup(fname);
  }
 +
-+/* backup switch routine called only when backing-up deleted file */
++/* backup switch routine called only when backing-up removed file */
 +int safe_delete(char *fname)
 +{
 +      int ret;
@@ -106,14 +105,14 @@ Marc St-Onge
 +      deleting = 0;
 +      return ret;
 +}
---- orig/flist.c       2005-01-25 12:14:14
+--- orig/flist.c       2005-01-28 19:08:20
 +++ flist.c    2005-01-24 02:21:33
 @@ -47,6 +47,8 @@ extern char curr_dir[MAXPATHLEN];
  extern unsigned int curr_dir_len;
  extern char *backup_dir;
  extern char *backup_suffix;
-+extern char *delete_dir;
-+extern char *delete_suffix;
++extern char *backup_dir_rm;
++extern char *backup_suffix_rm;
  extern int filesfrom_fd;
  
  extern int one_file_system;
@@ -121,11 +120,11 @@ Marc St-Onge
  extern int implied_dirs;
  extern int make_backups;
  extern int backup_suffix_len;
-+extern int delete_suffix_len;
++extern int backup_suffix_rm_len;
  extern int copy_links;
  extern int copy_unsafe_links;
  extern int protocol_version;
-@@ -1659,10 +1662,14 @@ char *f_name(struct file_struct *f)
+@@ -1674,10 +1677,14 @@ char *f_name(struct file_struct *f)
        return f_name_to(f, names[n]);
  }
  
@@ -136,18 +135,18 @@ Marc St-Onge
 -      return k > 0 && strcmp(fn+k, backup_suffix) == 0;
 +      if (k > 0 && strcmp(fn+k, backup_suffix) == 0)
 +              return 1;
-+      k += backup_suffix_len - delete_suffix_len;
-+      return k > 0 && strcmp(fn+k, delete_suffix) == 0;
++      k += backup_suffix_len - backup_suffix_rm_len;
++      return k > 0 && strcmp(fn+k, backup_suffix_rm) == 0;
  }
  
  void delete_in_dir(struct file_list *flist, char *fname)
-@@ -1716,11 +1723,12 @@ void delete_in_dir(struct file_list *fli
+@@ -1731,11 +1738,12 @@ void delete_in_dir(struct file_list *fli
                    || (delete_during && S_ISDIR(mode)
                     && !S_ISDIR(flist->files[j]->mode))) {
                        char *f = f_name(del_flist->files[i]);
 -                      if (make_backups && (backup_dir || !is_backup_file(f))
 +                      int backup_file = is_backup_file(f);
-+                      if (make_backups && (delete_dir || !backup_file)
++                      if (make_backups && (backup_dir_rm || !backup_file)
                          && !S_ISDIR(mode)) {
 -                              make_backup(f);
 +                              safe_delete(f);
@@ -157,20 +156,20 @@ Marc St-Onge
                                                safe_fname(f));
                                }
                        } else {
---- orig/options.c     2005-01-25 12:14:14
-+++ options.c  2004-11-27 18:37:18
+--- orig/options.c     2005-01-28 19:08:20
++++ options.c  2005-01-28 19:17:35
 @@ -119,10 +119,14 @@ int no_detach = 0;
  int write_batch = 0;
  int read_batch = 0;
  int backup_dir_len = 0;
-+int delete_dir_len = 0;       
++int backup_dir_rm_len = 0;    
  int backup_suffix_len;
-+int delete_suffix_len;
++int backup_suffix_rm_len;
  unsigned int backup_dir_remainder;
-+unsigned int delete_dir_remainder;
++unsigned int backup_dir_rm_remainder;
  
  char *backup_suffix = NULL;
-+char *delete_suffix = NULL;
++char *backup_suffix_rm = NULL;
  char *tmpdir = NULL;
  char *partial_dir = NULL;
  char *basis_dir[MAX_BASIS_DIRS+1];
@@ -178,129 +177,128 @@ Marc St-Onge
  char *password_file = NULL;
  char *rsync_path = RSYNC_PATH;
  char *backup_dir = NULL;
-+char *delete_dir = NULL;
++char *backup_dir_rm = NULL;
  char backup_dir_buf[MAXPATHLEN];
-+char delete_dir_buf[MAXPATHLEN];
++char backup_dir_rm_buf[MAXPATHLEN];
  int rsync_port = 0;
  int compare_dest = 0;
  int copy_dest = 0;
-@@ -251,7 +257,9 @@ void usage(enum logcode F)
-   rprintf(F,"     --no-implied-dirs       don't send implied dirs with -R\n");
+@@ -256,6 +262,8 @@ void usage(enum logcode F)
    rprintf(F," -b, --backup                make backups (see --suffix & --backup-dir)\n");
-   rprintf(F,"     --backup-dir            make backups into this directory\n");
-+  rprintf(F,"     --delete-dir            make backups of deleted files into this directory\n");
-   rprintf(F,"     --suffix=SUFFIX         backup suffix (default %s w/o --backup-dir)\n",BACKUP_SUFFIX);
-+  rprintf(F,"     --delete-suffix=SUFFIX  deleted files suffix (default %s w/o --backup-dir)\n",BACKUP_SUFFIX);
-   rprintf(F," -u, --update                update only (don't overwrite newer files)\n");
+   rprintf(F,"     --backup-dir=DIR        make backups into hierarchy based in DIR\n");
+   rprintf(F,"     --suffix=SUFFIX         set backup suffix (default %s w/o --backup-dir)\n",BACKUP_SUFFIX);
++  rprintf(F,"     --backup-dir-rm         make backups of removed files into current dir\n");
++  rprintf(F,"     --backup-suffix-rm=SUF  set removed-files suffix (defaults to --suffix)\n");
+   rprintf(F," -u, --update                skip files that are newer on the receiver\n");
    rprintf(F,"     --inplace               update destination files in-place (SEE MAN PAGE)\n");
    rprintf(F," -d, --dirs                  transfer directories without recursing\n");
-@@ -342,6 +350,7 @@ static struct poptOption long_options[] 
+@@ -348,6 +356,7 @@ static struct poptOption long_options[] 
    /* longName, shortName, argInfo, argPtr, value, descrip, argDesc */
    {"version",          0,  POPT_ARG_NONE,   0, OPT_VERSION, 0, 0},
    {"suffix",           0,  POPT_ARG_STRING, &backup_suffix, 0, 0, 0 },
-+  {"delete-suffix",    0,  POPT_ARG_STRING, &delete_suffix, 0, 0, 0 },
++  {"backup-suffix-rm", 0,  POPT_ARG_STRING, &backup_suffix_rm, 0, 0, 0 },
    {"rsync-path",       0,  POPT_ARG_STRING, &rsync_path, 0, 0, 0 },
    {"password-file",    0,  POPT_ARG_STRING, &password_file, 0, 0, 0 },
    {"ignore-times",    'I', POPT_ARG_NONE,   &ignore_times, 0, 0, 0 },
-@@ -416,6 +425,7 @@ static struct poptOption long_options[] 
+@@ -424,6 +433,7 @@ static struct poptOption long_options[] 
    {"log-format",       0,  POPT_ARG_STRING, &log_format, 0, 0, 0 },
    {"bwlimit",          0,  POPT_ARG_INT,    &bwlimit, 0, 0, 0 },
    {"backup-dir",       0,  POPT_ARG_STRING, &backup_dir, 0, 0, 0 },
-+  {"delete-dir",       0,  POPT_ARG_STRING, &delete_dir, 0, 0, 0 },
++  {"backup-dir-rm",    0,  POPT_ARG_STRING, &backup_dir_rm, 0, 0, 0 },
    {"hard-links",      'H', POPT_ARG_NONE,   &preserve_hard_links, 0, 0, 0 },
    {"read-batch",       0,  POPT_ARG_STRING, &batch_name, OPT_READ_BATCH, 0, 0 },
    {"write-batch",      0,  POPT_ARG_STRING, &batch_name, OPT_WRITE_BATCH, 0, 0 },
-@@ -918,6 +928,8 @@ int parse_arguments(int *argc, const cha
+@@ -932,6 +942,8 @@ int parse_arguments(int *argc, const cha
                        partial_dir = sanitize_path(NULL, partial_dir, NULL, 0);
                if (backup_dir)
                        backup_dir = sanitize_path(NULL, backup_dir, NULL, 0);
-+              if (delete_dir)                                                 
-+                      delete_dir = sanitize_path(NULL, delete_dir, NULL, 0);
++              if (backup_dir_rm)                                                      
++                      backup_dir_rm = sanitize_path(NULL, backup_dir_rm, NULL, 0);
                if (files_from)
                        files_from = sanitize_path(NULL, files_from, NULL, 0);
        }
-@@ -944,6 +956,12 @@ int parse_arguments(int *argc, const cha
+@@ -958,6 +970,12 @@ int parse_arguments(int *argc, const cha
                        if (check_filter(elp, backup_dir, 1) < 0)
                                goto options_rejected;
                }
-+              /* Clean delete_dir same as for backup_dir */
-+              if (delete_dir) {
-+                      clean_fname(delete_dir, 1);
-+                      if (check_exclude(elp, delete_dir, 1) < 0)
++              /* Clean backup_dir_rm same as for backup_dir */
++              if (backup_dir_rm) {
++                      clean_fname(backup_dir_rm, 1);
++                      if (check_exclude(elp, backup_dir_rm, 1) < 0)
 +                              goto options_rejected;
 +              }
        }
        if (server_filter_list.head && files_from) {
                clean_fname(files_from, 1);
-@@ -964,6 +982,16 @@ int parse_arguments(int *argc, const cha
+@@ -978,6 +996,16 @@ int parse_arguments(int *argc, const cha
                        backup_suffix);
                return 0;
        }
-+      /* if deleted_suffix not supplied, default to backup_suffix */
-+      if (!delete_suffix)
-+              delete_suffix = delete_dir ? "" : backup_suffix;
-+      delete_suffix_len = strlen(delete_suffix);
-+      if (strchr(delete_suffix, '/') != NULL) {
++      /* if suffix_rm not supplied, default to backup_suffix */
++      if (!backup_suffix_rm)
++              backup_suffix_rm = backup_dir_rm ? "" : backup_suffix;
++      backup_suffix_rm_len = strlen(backup_suffix_rm);
++      if (strchr(backup_suffix_rm, '/') != NULL) {
 +              snprintf(err_buf, sizeof err_buf,
-+                      "--delete-suffix cannot contain slashes: %s\n",
-+                      delete_suffix); 
++                      "--backup-suffix-rm cannot contain slashes: %s\n",
++                      backup_suffix_rm);      
 +              return 0;
 +      }
        if (backup_dir) {
                backup_dir_len = strlcpy(backup_dir_buf, backup_dir, sizeof backup_dir_buf);
                backup_dir_remainder = sizeof backup_dir_buf - backup_dir_len;
-@@ -983,6 +1011,31 @@ int parse_arguments(int *argc, const cha
+@@ -997,6 +1025,31 @@ int parse_arguments(int *argc, const cha
                        "--suffix cannot be a null string without --backup-dir\n");
                return 0;
        }
-+      /* If delete_dir not supplied default to backup_dir if it has been supplied */
-+      if (backup_dir && !delete_dir) {
-+              delete_dir = backup_dir;
-+              delete_dir_len = backup_dir_len;
-+              delete_dir_remainder = backup_dir_remainder;
-+              strlcpy(delete_dir_buf, backup_dir_buf, sizeof backup_dir_buf);
-+      } else if (delete_dir) {
-+              delete_dir_len = strlcpy(delete_dir_buf, delete_dir, sizeof delete_dir_buf);
-+              delete_dir_remainder = sizeof delete_dir_buf - delete_dir_len;
-+              if (delete_dir_remainder < 32) {
++      /* If backup_dir_rm not supplied default to backup_dir if it has been supplied */
++      if (backup_dir && !backup_dir_rm) {
++              backup_dir_rm = backup_dir;
++              backup_dir_rm_len = backup_dir_len;
++              backup_dir_rm_remainder = backup_dir_remainder;
++              strlcpy(backup_dir_rm_buf, backup_dir_buf, sizeof backup_dir_buf);
++      } else if (backup_dir_rm) {
++              backup_dir_rm_len = strlcpy(backup_dir_rm_buf, backup_dir_rm, sizeof backup_dir_rm_buf);
++              backup_dir_rm_remainder = sizeof backup_dir_rm_buf - backup_dir_rm_len;
++              if (backup_dir_rm_remainder < 32) {
 +                      snprintf(err_buf, sizeof err_buf,
-+                              "the --delete-dir path is WAY too long.\n");
++                              "the --backup-dir-rm path is WAY too long.\n");
 +                      return 0;
 +              }
-+              if (delete_dir_buf[delete_dir_len - 1] != '/') {
-+                      delete_dir_buf[delete_dir_len++] = '/';
-+                      delete_dir_buf[delete_dir_len] = '\0';
++              if (backup_dir_rm_buf[backup_dir_rm_len - 1] != '/') {
++                      backup_dir_rm_buf[backup_dir_rm_len++] = '/';
++                      backup_dir_rm_buf[backup_dir_rm_len] = '\0';
 +              }
 +              if (verbose > 1 && !am_sender)
-+                      rprintf(FINFO, "delete_dir is %s\n", delete_dir_buf);
-+      } else if (!delete_suffix_len && (!am_server || !am_sender)) {
++                      rprintf(FINFO, "backup_dir_rm is %s\n", backup_dir_rm_buf);
++      } else if (!backup_suffix_rm_len && (!am_server || !am_sender)) {
 +              snprintf(err_buf, sizeof err_buf,
-+                      "--delete-suffix cannot be a null string without --delete-dir\n");
++                      "--backup-suffix-rm cannot be a null string without --backup-dir-rm\n");
 +              return 0;
 +      }
  
        if (do_progress && !verbose)
                verbose = 1;
-@@ -1196,6 +1249,10 @@ void server_options(char **args,int *arg
+@@ -1214,6 +1267,10 @@ void server_options(char **args,int *arg
                args[ac++] = "--backup-dir";
                args[ac++] = backup_dir;
        }
-+      if (delete_dir) {
-+              args[ac++] = "--delete-dir";
-+              args[ac++] = delete_dir;
++      if (backup_dir_rm) {
++              args[ac++] = "--backup-dir-rm";
++              args[ac++] = backup_dir_rm;
 +      }
  
        /* Only send --suffix if it specifies a non-default value. */
        if (strcmp(backup_suffix, backup_dir ? "" : BACKUP_SUFFIX) != 0) {
-@@ -1204,7 +1261,13 @@ void server_options(char **args,int *arg
+@@ -1222,7 +1279,13 @@ void server_options(char **args,int *arg
                        goto oom;
                args[ac++] = arg;
        }
 -
-+      /* Only send --delete-suffix if it specifies a non-default value. */
-+      if (strcmp(delete_suffix, delete_dir ? "" : BACKUP_SUFFIX) != 0) {
++      /* Only send --backup-suffix-rm if it specifies a non-default value. */
++      if (strcmp(backup_suffix_rm, backup_dir_rm ? "" : BACKUP_SUFFIX) != 0) {
 +              /* We use the following syntax to avoid weirdness with '~'. */
-+              if (asprintf(&arg, "--delete-suffix=%s", delete_suffix) < 0)
++              if (asprintf(&arg, "--backup-suffix-rm=%s", backup_suffix_rm) < 0)
 +                      goto oom;
 +              args[ac++] = arg;
 +      }
index 4d42512..8d6d3f4 100644 (file)
@@ -15,7 +15,7 @@ Jeremy Bornstein
 
 [Patched update to have context and apply to latest CVS source.]
 
---- orig/generator.c   2005-01-24 06:20:37
+--- orig/generator.c   2005-01-25 12:14:14
 +++ generator.c        2004-11-11 22:15:27
 @@ -43,6 +43,7 @@ extern int inplace;
  extern int make_backups;
@@ -34,9 +34,9 @@ Jeremy Bornstein
        if (st->st_size != file->length)
                return 0;
  
---- orig/options.c     2005-01-25 03:26:51
-+++ options.c  2004-11-17 19:41:59
-@@ -89,6 +89,7 @@ int keep_partial = 0;
+--- orig/options.c     2005-01-28 19:08:20
++++ options.c  2005-01-28 19:14:15
+@@ -88,6 +88,7 @@ int keep_partial = 0;
  int safe_symlinks = 0;
  int copy_unsafe_links = 0;
  int size_only = 0;
@@ -44,15 +44,15 @@ Jeremy Bornstein
  int daemon_bwlimit = 0;
  int bwlimit = 0;
  size_t bwlimit_writemax = 0;
-@@ -292,6 +293,7 @@ void usage(enum logcode F)
+@@ -298,6 +299,7 @@ void usage(enum logcode F)
    rprintf(F,"     --timeout=TIME          set I/O timeout in seconds\n");
-   rprintf(F," -I, --ignore-times          turn off mod time & file size quick check\n");
-   rprintf(F,"     --size-only             ignore mod time for quick check (use size)\n");
-+  rprintf(F,"     --date-only             ignore size for quick check (use mod time)\n");
-   rprintf(F,"     --modify-window=NUM     compare mod times with reduced accuracy\n");
+   rprintf(F," -I, --ignore-times          don't skip files that match in size and mod-time\n");
+   rprintf(F,"     --size-only             skip files that match in size\n");
++  rprintf(F,"     --date-only             skip files that match in mod-time\n");
+   rprintf(F,"     --modify-window=NUM     compare mod-times with reduced accuracy\n");
    rprintf(F," -T, --temp-dir=DIR          create temporary files in directory DIR\n");
    rprintf(F,"     --compare-dest=DIR      also compare destination files relative to DIR\n");
-@@ -346,6 +348,7 @@ static struct poptOption long_options[] 
+@@ -352,6 +354,7 @@ static struct poptOption long_options[] 
    {"password-file",    0,  POPT_ARG_STRING, &password_file, 0, 0, 0 },
    {"ignore-times",    'I', POPT_ARG_NONE,   &ignore_times, 0, 0, 0 },
    {"size-only",        0,  POPT_ARG_NONE,   &size_only, 0, 0, 0 },
@@ -60,7 +60,7 @@ Jeremy Bornstein
    {"modify-window",    0,  POPT_ARG_INT,    &modify_window, OPT_MODIFY_WINDOW, 0, 0 },
    {"one-file-system", 'x', POPT_ARG_NONE,   &one_file_system, 0, 0, 0 },
    {"existing",         0,  POPT_ARG_NONE,   &only_existing, 0, 0, 0 },
-@@ -1221,6 +1224,9 @@ void server_options(char **args,int *arg
+@@ -1241,6 +1244,9 @@ void server_options(char **args,int *arg
        if (size_only)
                args[ac++] = "--size-only";
  
@@ -70,17 +70,17 @@ Jeremy Bornstein
        if (modify_window_set) {
                if (asprintf(&arg, "--modify-window=%d", modify_window) < 0)
                        goto oom;
---- orig/rsync.yo      2005-01-25 03:26:51
-+++ rsync.yo   2004-07-03 20:16:51
-@@ -357,6 +357,7 @@ verb(
+--- orig/rsync.yo      2005-01-28 17:12:14
++++ rsync.yo   2005-01-28 19:14:37
+@@ -360,6 +360,7 @@ verb(
       --timeout=TIME          set I/O timeout in seconds
-  -I, --ignore-times          turn off mod time & file size quick check
-      --size-only             ignore mod time for quick check (use size)
-+     --date-only             ignore size for quick check (use mod time)
-      --modify-window=NUM     compare mod times with reduced accuracy
+  -I, --ignore-times          don't skip files that match size and time
+      --size-only             skip files that match in size
++     --date-only             skip files that match in mod-time
+      --modify-window=NUM     compare mod-times with reduced accuracy
   -T  --temp-dir=DIR          create temporary files in directory DIR
       --compare-dest=DIR      also compare received files relative to DIR
-@@ -444,6 +445,12 @@ regardless of timestamp. This is useful 
+@@ -448,6 +449,12 @@ regardless of timestamp. This is useful 
  after using another mirroring system which may not preserve timestamps
  exactly.
  
index 1fe511c..cc9dccb 100644 (file)
@@ -87,7 +87,7 @@ Note that you'll need to run 'make proto' after applying this patch.
  
  #define RERR_SIGNAL     20      /* status returned when sent SIGUSR1, SIGINT */
  #define RERR_WAITCHILD  21      /* some error returned by waitpid() */
---- orig/flist.c       2005-01-25 00:53:58
+--- orig/flist.c       2005-01-28 19:08:20
 +++ flist.c    2005-01-21 19:10:03
 @@ -69,6 +69,7 @@ extern int delete_excluded;
  extern int max_delete;
@@ -97,7 +97,7 @@ Note that you'll need to run 'make proto' after applying this patch.
  
  extern struct filter_list_struct filter_list;
  extern struct filter_list_struct server_filter_list;
-@@ -358,7 +359,10 @@ void send_file_entry(struct file_struct 
+@@ -356,7 +357,10 @@ void send_file_entry(struct file_struct 
  
        io_write_phase = "send_file_entry";
  
@@ -109,7 +109,7 @@ Note that you'll need to run 'make proto' after applying this patch.
  
        flags = base_flags;
  
-@@ -574,6 +578,9 @@ void receive_file_entry(struct file_stru
+@@ -572,6 +576,9 @@ void receive_file_entry(struct file_stru
  
        strlcpy(lastname, thisname, MAXPATHLEN);
  
@@ -120,8 +120,8 @@ Note that you'll need to run 'make proto' after applying this patch.
  
        if (sanitize_paths)
 @@ -1088,6 +1095,9 @@ struct file_list *send_file_list(int f, 
        start_write = stats.total_written;
+       gettimeofday(&start_tv, NULL);
  
 +      if (!am_server)
 +              init_fname_convert();
@@ -129,7 +129,7 @@ Note that you'll need to run 'make proto' after applying this patch.
        flist = flist_new(f == -1 ? WITHOUT_HLINK : WITH_HLINK,
                          "send_file_list");
  
-@@ -1278,6 +1288,9 @@ struct file_list *send_file_list(int f, 
+@@ -1291,6 +1301,9 @@ struct file_list *send_file_list(int f, 
                stats.num_files = flist->count;
        }
  
@@ -139,7 +139,7 @@ Note that you'll need to run 'make proto' after applying this patch.
        if (verbose > 3)
                output_flist(flist, f < 0 ? "delete" : who_am_i());
  
-@@ -1299,6 +1312,9 @@ struct file_list *recv_file_list(int f)
+@@ -1312,6 +1325,9 @@ struct file_list *recv_file_list(int f)
  
        start_read = stats.total_read;
  
@@ -149,7 +149,7 @@ Note that you'll need to run 'make proto' after applying this patch.
        flist = flist_new(WITH_HLINK, "recv_file_list");
        received_flist = flist;
  
-@@ -1352,6 +1368,9 @@ struct file_list *recv_file_list(int f)
+@@ -1365,6 +1381,9 @@ struct file_list *recv_file_list(int f)
                        io_error |= read_int(f);
        }
  
@@ -382,7 +382,7 @@ Note that you'll need to run 'make proto' after applying this patch.
 +      if (verbose > 2)
 +              rprintf(FINFO, "Converted filename: %s -> %s\n", src, dest);
 +}
---- orig/generator.c   2005-01-24 06:20:37
+--- orig/generator.c   2005-01-25 12:14:14
 +++ generator.c        2004-07-03 20:18:02
 @@ -235,6 +235,12 @@ static void generate_and_send_sums(int f
   *
@@ -397,7 +397,7 @@ Note that you'll need to run 'make proto' after applying this patch.
   */
  static void recv_generator(char *fname, struct file_list *flist,
                           struct file_struct *file, int i,
---- orig/log.c 2004-09-07 19:54:51
+--- orig/log.c 2005-01-28 19:08:20
 +++ log.c      2004-07-03 20:18:02
 @@ -57,6 +57,7 @@ struct {
        { RERR_STREAMIO   , "error in rsync protocol data stream" },
@@ -407,9 +407,9 @@ Note that you'll need to run 'make proto' after applying this patch.
        { RERR_SIGNAL     , "received SIGUSR1 or SIGINT" },
        { RERR_WAITCHILD  , "some error returned by waitpid()" },
        { RERR_MALLOC     , "error allocating core memory buffers" },
---- orig/main.c        2005-01-24 01:43:10
+--- orig/main.c        2005-01-28 19:08:20
 +++ main.c     2004-07-22 00:31:47
-@@ -335,7 +335,7 @@ static pid_t do_cmd(char *cmd, char *mac
+@@ -355,7 +355,7 @@ static pid_t do_cmd(char *cmd, char *mac
                        whole_file = 1;
                ret = local_child(argc, args, f_in, f_out, child_main);
        } else
@@ -418,8 +418,8 @@ Note that you'll need to run 'make proto' after applying this patch.
  
        if (dir)
                free(dir);
---- orig/options.c     2005-01-25 03:26:51
-+++ options.c  2005-01-15 21:28:07
+--- orig/options.c     2005-01-28 19:08:20
++++ options.c  2005-01-28 19:29:38
 @@ -129,6 +129,7 @@ char *basis_dir[MAX_BASIS_DIRS+1];
  char *config_file = NULL;
  char *shell_cmd = NULL;
@@ -428,15 +428,15 @@ Note that you'll need to run 'make proto' after applying this patch.
  char *password_file = NULL;
  char *rsync_path = RSYNC_PATH;
  char *backup_dir = NULL;
-@@ -298,6 +299,7 @@ void usage(enum logcode F)
+@@ -303,6 +304,7 @@ void usage(enum logcode F)
+   rprintf(F,"     --compare-dest=DIR      also compare destination files relative to DIR\n");
    rprintf(F,"     --copy-dest=DIR         ... and include copies of unchanged files\n");
    rprintf(F,"     --link-dest=DIR         hardlink to files in DIR when unchanged\n");
-   rprintf(F," -P                          equivalent to --partial --progress\n");
 +  rprintf(F,"     --fname-convert=CMD     invoke CMD for filename conversion\n");
    rprintf(F," -z, --compress              compress file data\n");
-   rprintf(F," -C, --cvs-exclude           auto ignore files in the same way CVS does\n");
+   rprintf(F," -C, --cvs-exclude           auto-ignore files the same way CVS does\n");
    rprintf(F," -f, --filter=RULE           add a file-filtering RULE\n");
-@@ -401,6 +403,7 @@ static struct poptOption long_options[] 
+@@ -408,6 +410,7 @@ static struct poptOption long_options[] 
    {"compare-dest",     0,  POPT_ARG_STRING, 0, OPT_COMPARE_DEST, 0, 0 },
    {"copy-dest",        0,  POPT_ARG_STRING, 0, OPT_COPY_DEST, 0, 0 },
    {"link-dest",        0,  POPT_ARG_STRING, 0, OPT_LINK_DEST, 0, 0 },
@@ -475,9 +475,9 @@ Note that you'll need to run 'make proto' after applying this patch.
        if (pid == -1) {
                rsyserr(FERROR, errno, "fork");
                exit_cleanup(RERR_IPC);
---- orig/syscall.c     2005-01-19 20:11:10
+--- orig/syscall.c     2005-01-28 17:12:14
 +++ syscall.c  2004-07-02 21:39:00
-@@ -270,3 +270,34 @@ char *d_name(struct dirent *di)
+@@ -259,3 +259,34 @@ char *d_name(struct dirent *di)
        return di->d_name;
  #endif
  }
@@ -512,7 +512,7 @@ Note that you'll need to run 'make proto' after applying this patch.
 +
 +      return result;
 +}
---- orig/util.c        2005-01-20 23:05:34
+--- orig/util.c        2005-01-28 19:08:20
 +++ util.c     2004-07-03 20:18:02
 @@ -1213,3 +1213,55 @@ void *_realloc_array(void *ptr, unsigned
                return malloc(size * num);
index eb352b4..2aecf46 100644 (file)
@@ -4,9 +4,9 @@ Lightly tested.
 
 Be sure to run "make proto" before "make".
 
---- orig/generator.c   2005-01-23 07:55:40
+--- orig/generator.c   2005-01-25 12:14:14
 +++ generator.c        2005-01-19 18:39:15
-@@ -45,6 +45,7 @@ extern int size_only;
+@@ -47,6 +47,7 @@ extern int size_only;
  extern OFF_T max_size;
  extern int io_timeout;
  extern int protocol_version;
@@ -14,7 +14,7 @@ Be sure to run "make proto" before "make".
  extern int always_checksum;
  extern char *partial_dir;
  extern char *basis_dir[];
-@@ -225,6 +226,88 @@ static void generate_and_send_sums(int f
+@@ -227,6 +228,88 @@ static void generate_and_send_sums(int f
                unmap_file(mapbuf);
  }
  
@@ -154,7 +154,7 @@ Be sure to run "make proto" before "make".
  
        if (dry_run || read_batch)
                return;
---- orig/main.c        2005-01-23 01:48:52
+--- orig/main.c        2005-01-28 19:08:20
 +++ main.c     2005-01-14 18:33:15
 @@ -49,6 +49,7 @@ extern int keep_dirlinks;
  extern int preserve_hard_links;
@@ -164,7 +164,7 @@ Be sure to run "make proto" before "make".
  extern int relative_paths;
  extern int rsync_port;
  extern int whole_file;
-@@ -465,7 +466,8 @@ static int do_recv(int f_in,int f_out,st
+@@ -485,7 +486,8 @@ static int do_recv(int f_in,int f_out,st
        int pid;
        int status = 0;
        int error_pipe[2], name_pipe[2];
@@ -174,8 +174,8 @@ Be sure to run "make proto" before "make".
  
        /* The receiving side mustn't obey this, or an existing symlink that
         * points to an identical file won't be replaced by the referent. */
---- orig/options.c     2005-01-23 01:53:35
-+++ options.c  2005-01-15 21:08:13
+--- orig/options.c     2005-01-28 19:08:20
++++ options.c  2005-01-28 19:31:20
 @@ -90,6 +90,7 @@ int copy_unsafe_links = 0;
  int size_only = 0;
  int daemon_bwlimit = 0;
@@ -184,15 +184,15 @@ Be sure to run "make proto" before "make".
  size_t bwlimit_writemax = 0;
  int only_existing = 0;
  int opt_ignore_existing = 0;
-@@ -293,6 +294,7 @@ void usage(enum logcode F)
+@@ -303,6 +304,7 @@ void usage(enum logcode F)
    rprintf(F,"     --compare-dest=DIR      also compare destination files relative to DIR\n");
    rprintf(F,"     --copy-dest=DIR         ... and include copies of unchanged files\n");
    rprintf(F,"     --link-dest=DIR         hardlink to files in DIR when unchanged\n");
 +  rprintf(F,"     --fuzzy                 find similar file for basis when no dest file\n");
-   rprintf(F," -P                          equivalent to --partial --progress\n");
    rprintf(F," -z, --compress              compress file data\n");
-   rprintf(F," -C, --cvs-exclude           auto ignore files in the same way CVS does\n");
-@@ -393,6 +395,7 @@ static struct poptOption long_options[] 
+   rprintf(F," -C, --cvs-exclude           auto-ignore files the same way CVS does\n");
+   rprintf(F," -f, --filter=RULE           add a file-filtering RULE\n");
+@@ -408,6 +410,7 @@ static struct poptOption long_options[] 
    {"compare-dest",     0,  POPT_ARG_STRING, 0, OPT_COMPARE_DEST, 0, 0 },
    {"copy-dest",        0,  POPT_ARG_STRING, 0, OPT_COPY_DEST, 0, 0 },
    {"link-dest",        0,  POPT_ARG_STRING, 0, OPT_LINK_DEST, 0, 0 },
@@ -200,7 +200,7 @@ Be sure to run "make proto" before "make".
    /* TODO: Should this take an optional int giving the compression level? */
    {"compress",        'z', POPT_ARG_NONE,   &do_compression, 0, 0, 0 },
    {"stats",            0,  POPT_ARG_NONE,   &do_stats, 0, 0, 0 },
-@@ -1251,6 +1254,9 @@ void server_options(char **args,int *arg
+@@ -1315,6 +1318,9 @@ void server_options(char **args,int *arg
        if (!implied_dirs && !am_sender)
                args[ac++] = "--no-implied-dirs";
  
@@ -210,9 +210,9 @@ Be sure to run "make proto" before "make".
        *argc = ac;
        return;
  
---- orig/receiver.c    2005-01-23 07:55:58
+--- orig/receiver.c    2005-01-28 19:08:20
 +++ receiver.c 2005-01-15 21:21:02
-@@ -251,6 +251,27 @@ static int receive_data(int f_in, char *
+@@ -252,6 +252,27 @@ static int receive_data(int f_in, char *
  }
  
  
@@ -240,7 +240,7 @@ Be sure to run "make proto" before "make".
  static void discard_receive_data(int f_in, OFF_T length)
  {
        receive_data(f_in, NULL, -1, 0, NULL, -1, length);
-@@ -381,6 +402,10 @@ int recv_files(int f_in, struct file_lis
+@@ -390,6 +411,10 @@ int recv_files(int f_in, struct file_lis
                        case FNAMECMP_BACKUP:
                                fnamecmp = get_backup_name(fname);
                                break;
@@ -251,9 +251,9 @@ Be sure to run "make proto" before "make".
                        default:
                                if (j >= basis_dir_cnt) {
                                        rprintf(FERROR,
---- orig/rsync.h       2005-01-21 00:35:26
+--- orig/rsync.h       2005-01-28 19:08:20
 +++ rsync.h    2005-01-19 18:36:47
-@@ -128,6 +128,7 @@
+@@ -130,6 +130,7 @@
  #define FNAMECMP_FNAME                0x80
  #define FNAMECMP_PARTIAL_DIR  0x81
  #define FNAMECMP_BACKUP       0x82
@@ -261,17 +261,17 @@ Be sure to run "make proto" before "make".
  
  /* For calling delete_file() */
  #define DEL_DIR               (1<<0)
---- orig/rsync.yo      2005-01-23 02:57:49
-+++ rsync.yo   2005-01-15 21:48:52
-@@ -360,6 +360,7 @@ verb(
+--- orig/rsync.yo      2005-01-28 17:12:14
++++ rsync.yo   2005-01-28 19:31:36
+@@ -365,6 +365,7 @@ verb(
       --compare-dest=DIR      also compare received files relative to DIR
       --copy-dest=DIR         ... and include copies of unchanged files
       --link-dest=DIR         hardlink to files in DIR when unchanged
 +     --fuzzy                 find similar file for basis when no dest
-  -P                          equivalent to --partial --progress
   -z, --compress              compress file data
-  -C, --cvs-exclude           auto ignore files in the same way CVS does
-@@ -896,6 +897,14 @@ Note that rsync versions prior to 2.6.1 
+  -C, --cvs-exclude           auto-ignore files in the same way CVS does
+  -f, --filter=RULE           add a file-filtering RULE
+@@ -949,6 +950,14 @@ Note that rsync versions prior to 2.6.1 
  (or implied by -a).  You can work-around this bug by avoiding the -o option
  when sending to an old rsync.
  
@@ -286,7 +286,7 @@ Be sure to run "make proto" before "make".
  dit(bf(-z, --compress)) With this option, rsync compresses any data from
  the files that it sends to the destination machine.  This
  option is useful on slow connections.  The compression method used is the
---- orig/util.c        2005-01-20 23:05:34
+--- orig/util.c        2005-01-28 19:08:20
 +++ util.c     2005-01-19 17:30:51
 @@ -1213,3 +1213,108 @@ void *_realloc_array(void *ptr, unsigned
                return malloc(size * num);
index efe3c14..d8bd437 100644 (file)
@@ -49,7 +49,7 @@ the file's name.
 +
 +extern char *link_by_hash_dir;
 +
-+#ifdef HAVE_LINK
++#if HAVE_LINK
 +
 +char* make_hash_name(struct file_struct *file)
 +{
@@ -365,8 +365,8 @@ the file's name.
 +}
 +
 +#endif
---- orig/options.c     2005-01-25 03:26:51
-+++ options.c  2004-11-27 18:19:42
+--- orig/options.c     2005-01-28 19:08:20
++++ options.c  2005-01-28 19:32:26
 @@ -132,6 +132,7 @@ char *log_format = NULL;
  char *password_file = NULL;
  char *rsync_path = RSYNC_PATH;
@@ -375,15 +375,15 @@ the file's name.
  char backup_dir_buf[MAXPATHLEN];
  int rsync_port = 0;
  int compare_dest = 0;
-@@ -297,6 +298,7 @@ void usage(enum logcode F)
+@@ -303,6 +304,7 @@ void usage(enum logcode F)
    rprintf(F,"     --compare-dest=DIR      also compare destination files relative to DIR\n");
    rprintf(F,"     --copy-dest=DIR         ... and include copies of unchanged files\n");
    rprintf(F,"     --link-dest=DIR         hardlink to files in DIR when unchanged\n");
 +  rprintf(F,"     --link-by-hash=DIR      create hardlinks by hash to DIR for regular files\n");
-   rprintf(F," -P                          equivalent to --partial --progress\n");
    rprintf(F," -z, --compress              compress file data\n");
-   rprintf(F," -C, --cvs-exclude           auto ignore files in the same way CVS does\n");
-@@ -335,7 +337,7 @@ void usage(enum logcode F)
+   rprintf(F," -C, --cvs-exclude           auto-ignore files the same way CVS does\n");
+   rprintf(F," -f, --filter=RULE           add a file-filtering RULE\n");
+@@ -341,7 +343,7 @@ void usage(enum logcode F)
  enum {OPT_VERSION = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
        OPT_FILTER, OPT_COMPARE_DEST, OPT_COPY_DEST, OPT_LINK_DEST,
        OPT_INCLUDE, OPT_INCLUDE_FROM, OPT_MODIFY_WINDOW,
@@ -392,7 +392,7 @@ the file's name.
        OPT_REFUSED_BASE = 9000};
  
  static struct poptOption long_options[] = {
-@@ -401,6 +403,7 @@ static struct poptOption long_options[] 
+@@ -408,6 +410,7 @@ static struct poptOption long_options[] 
    {"compare-dest",     0,  POPT_ARG_STRING, 0, OPT_COMPARE_DEST, 0, 0 },
    {"copy-dest",        0,  POPT_ARG_STRING, 0, OPT_COPY_DEST, 0, 0 },
    {"link-dest",        0,  POPT_ARG_STRING, 0, OPT_LINK_DEST, 0, 0 },
@@ -400,7 +400,7 @@ the file's name.
    /* TODO: Should this take an optional int giving the compression level? */
    {"compress",        'z', POPT_ARG_NONE,   &do_compression, 0, 0, 0 },
    {"stats",            0,  POPT_ARG_NONE,   &do_stats, 0, 0, 0 },
-@@ -788,6 +791,21 @@ int parse_arguments(int *argc, const cha
+@@ -802,6 +805,21 @@ int parse_arguments(int *argc, const cha
                        basis_dir[basis_dir_cnt++] = (char *)arg;
                        break;
  
@@ -422,7 +422,7 @@ the file's name.
                default:
                        /* A large opt value means that set_refuse_options()
                         * turned this option off (opt-BASE is its index). */
-@@ -1277,6 +1295,11 @@ void server_options(char **args,int *arg
+@@ -1299,6 +1317,11 @@ void server_options(char **args,int *arg
                }
        }
  
@@ -434,7 +434,7 @@ the file's name.
        if (files_from && (!am_sender || remote_filesfrom_file)) {
                if (remote_filesfrom_file) {
                        args[ac++] = "--files-from";
---- orig/receiver.c    2005-01-24 01:43:10
+--- orig/receiver.c    2005-01-28 19:08:20
 +++ receiver.c 2005-01-15 21:29:13
 @@ -36,6 +36,7 @@ extern int preserve_hard_links;
  extern int preserve_perms;
@@ -444,7 +444,7 @@ the file's name.
  extern char *partial_dir;
  extern char *basis_dir[];
  extern int basis_dir_cnt;
-@@ -131,12 +132,13 @@ static int get_tmpname(char *fnametmp, c
+@@ -132,12 +133,13 @@ static int get_tmpname(char *fnametmp, c
  
  
  static int receive_data(int f_in, char *fname_r, int fd_r, OFF_T size_r,
@@ -459,7 +459,7 @@ the file's name.
        int32 len;
        OFF_T offset = 0;
        OFF_T offset2;
-@@ -156,6 +158,9 @@ static int receive_data(int f_in, char *
+@@ -157,6 +159,9 @@ static int receive_data(int f_in, char *
        } else
                mapbuf = NULL;
  
@@ -469,7 +469,7 @@ the file's name.
        sum_init(checksum_seed);
  
        while ((i = recv_token(f_in, &data)) != 0) {
-@@ -172,6 +177,8 @@ static int receive_data(int f_in, char *
+@@ -173,6 +178,8 @@ static int receive_data(int f_in, char *
                        cleanup_got_literal = 1;
  
                        sum_update(data, i);
@@ -478,7 +478,7 @@ the file's name.
  
                        if (fd != -1 && write_file(fd,data,i) != i)
                                goto report_write_error;
-@@ -198,6 +205,8 @@ static int receive_data(int f_in, char *
+@@ -199,6 +206,8 @@ static int receive_data(int f_in, char *
  
                        see_token(map, len);
                        sum_update(map, len);
@@ -487,7 +487,7 @@ the file's name.
                }
  
                if (inplace) {
-@@ -238,6 +247,8 @@ static int receive_data(int f_in, char *
+@@ -239,6 +248,8 @@ static int receive_data(int f_in, char *
        }
  
        sum_end(file_sum1);
@@ -496,7 +496,7 @@ the file's name.
  
        if (mapbuf)
                unmap_file(mapbuf);
-@@ -253,7 +264,7 @@ static int receive_data(int f_in, char *
+@@ -254,7 +265,7 @@ static int receive_data(int f_in, char *
  
  static void discard_receive_data(int f_in, OFF_T length)
  {
@@ -505,11 +505,11 @@ the file's name.
  }
  
  
-@@ -486,8 +497,12 @@ int recv_files(int f_in, struct file_lis
+@@ -495,8 +506,12 @@ int recv_files(int f_in, struct file_lis
                        rprintf(FINFO, "%s\n", safe_fname(fname));
  
                /* recv file data */
-+#ifdef HAVE_LINK
++#if HAVE_LINK
 +              if (link_by_hash_dir)
 +                      file->u.sum = (char*)malloc(MD4_SUM_LENGTH);
 +#endif
@@ -519,7 +519,7 @@ the file's name.
  
                log_recv(file, &initial_stats);
  
---- orig/rsync.c       2005-01-24 00:57:24
+--- orig/rsync.c       2005-01-28 19:08:20
 +++ rsync.c    2004-08-13 18:14:34
 @@ -35,6 +35,7 @@ extern int force_delete;
  extern int recurse;
@@ -529,12 +529,12 @@ the file's name.
  extern char *backup_dir;
  extern int inplace;
  
-@@ -280,7 +281,12 @@ void finish_transfer(char *fname, char *
+@@ -281,7 +282,12 @@ void finish_transfer(char *fname, char *
        /* move tmp file over real file */
        if (verbose > 2)
                rprintf(FINFO, "renaming %s to %s\n", fnametmp, fname);
 -      ret = robust_rename(fnametmp, fname, file->mode & INITACCESSPERMS);
-+#ifdef HAVE_LINK
++#if HAVE_LINK
 +      if (link_by_hash_dir)
 +              ret = link_by_hash(fnametmp, fname, file);
 +      else
@@ -543,9 +543,9 @@ the file's name.
        if (ret < 0) {
                rsyserr(FERROR, errno, "%s %s -> \"%s\"",
                    ret == -2 ? "copy" : "rename",
---- orig/rsync.h       2005-01-25 00:53:58
+--- orig/rsync.h       2005-01-28 19:08:20
 +++ rsync.h    2004-07-03 20:20:15
-@@ -545,6 +545,14 @@ struct stats {
+@@ -599,6 +599,14 @@ struct stats {
        int current_file_index;
  };
  
@@ -560,3 +560,13 @@ the file's name.
  
  /* we need this function because of the silly way in which duplicate
     entries are handled in the file lists - we can't change this
+--- orig/rsync.yo      2005-01-28 17:12:14
++++ rsync.yo   2005-01-28 19:32:45
+@@ -365,6 +365,7 @@ verb(
+      --compare-dest=DIR      also compare received files relative to DIR
+      --copy-dest=DIR         ... and include copies of unchanged files
+      --link-dest=DIR         hardlink to files in DIR when unchanged
++     --link-by-hash=DIR      create hardlinks by hash to DIR for regular files
+  -z, --compress              compress file data
+  -C, --cvs-exclude           auto-ignore files in the same way CVS does
+  -f, --filter=RULE           add a file-filtering RULE
index 64f7b8e..2a7cba6 100644 (file)
@@ -6,9 +6,9 @@ with the latest codebase, but even in its original form it didn't
 handle relative symlinks properly, and that has not yet been fixed
 in this modified version.
 
---- orig/flist.c       2005-01-24 00:18:21
+--- orig/flist.c       2005-01-28 19:08:20
 +++ flist.c    2004-07-16 16:58:04
-@@ -50,6 +50,7 @@ extern int filesfrom_fd;
+@@ -52,6 +52,7 @@ extern int filesfrom_fd;
  extern int one_file_system;
  extern int keep_dirlinks;
  extern int preserve_links;
@@ -16,7 +16,7 @@ in this modified version.
  extern int preserve_hard_links;
  extern int preserve_perms;
  extern int preserve_devices;
-@@ -726,6 +727,30 @@ void receive_file_entry(struct file_stru
+@@ -740,6 +741,30 @@ void receive_file_entry(struct file_stru
  }
  
  
@@ -47,7 +47,7 @@ in this modified version.
  /**
   * Create a file_struct for a named file by reading its stat()
   * information and performing extensive checks against global
-@@ -850,7 +875,13 @@ skip_excludes:
+@@ -864,7 +889,13 @@ skip_filters:
        basename_len = strlen(basename) + 1; /* count the '\0' */
  
  #if SUPPORT_LINKS
@@ -62,8 +62,8 @@ in this modified version.
  #else
        linkname_len = 0;
  #endif
---- orig/options.c     2005-01-24 00:18:21
-+++ options.c  2004-07-16 16:12:29
+--- orig/options.c     2005-01-28 19:08:20
++++ options.c  2005-01-28 19:33:24
 @@ -42,6 +42,7 @@ int archive_mode = 0;
  int keep_dirlinks = 0;
  int copy_links = 0;
@@ -72,15 +72,15 @@ in this modified version.
  int preserve_hard_links = 0;
  int preserve_perms = 0;
  int preserve_devices = 0;
-@@ -253,6 +254,7 @@ void usage(enum logcode F)
+@@ -260,6 +261,7 @@ void usage(enum logcode F)
    rprintf(F,"     --inplace               update destination files in-place (SEE MAN PAGE)\n");
    rprintf(F," -d, --dirs                  transfer directories without recursing\n");
    rprintf(F," -l, --links                 copy symlinks as symlinks\n");
 +  rprintf(F,"     --links-depth=NUM       follow symlinks up to NUM depth\n");
-   rprintf(F," -L, --copy-links            copy the referent of all symlinks\n");
-   rprintf(F,"     --copy-unsafe-links     copy the referent of \"unsafe\" symlinks\n");
-   rprintf(F,"     --safe-links            ignore \"unsafe\" symlinks\n");
-@@ -360,6 +362,7 @@ static struct poptOption long_options[] 
+   rprintf(F," -L, --copy-links            transform symlink into referent file/dir\n");
+   rprintf(F,"     --copy-unsafe-links     only \"unsafe\" symlinks are transformed\n");
+   rprintf(F,"     --safe-links            ignore symlinks that point outside the source tree\n");
+@@ -378,6 +380,7 @@ static struct poptOption long_options[] 
    {"inplace",          0,  POPT_ARG_NONE,   &inplace, 0, 0, 0 },
    {"dirs",            'd', POPT_ARG_VAL,    &xfer_dirs, 2, 0, 0 },
    {"links",           'l', POPT_ARG_NONE,   &preserve_links, 0, 0, 0 },
@@ -88,3 +88,13 @@ in this modified version.
    {"copy-links",      'L', POPT_ARG_NONE,   &copy_links, 0, 0, 0 },
    {"keep-dirlinks",   'K', POPT_ARG_NONE,   &keep_dirlinks, 0, 0, 0 },
    {"whole-file",      'W', POPT_ARG_VAL,    &whole_file, 1, 0, 0 },
+--- orig/rsync.yo      2005-01-28 17:12:14
++++ rsync.yo   2005-01-28 19:33:40
+@@ -322,6 +322,7 @@ verb(
+      --inplace               update destination files in-place
+  -d, --dirs                  transfer directories without recursing
+  -l, --links                 copy symlinks as symlinks
++     --links-depth=NUM       follow symlinks up to NUM depth
+  -L, --copy-links            transform symlink into referent file/dir
+      --copy-unsafe-links     only "unsafe" symlinks are transformed
+      --safe-links            ignore symlinks that point outside the tree
index a02ece7..149cb50 100644 (file)
@@ -3,7 +3,7 @@ to be simpler and more efficient by Wayne Davison.
 
 Do we need configure support for mktime()?
 
---- orig/io.c  2005-01-19 20:11:10
+--- orig/io.c  2005-01-28 06:51:59
 +++ io.c       2004-07-17 15:28:36
 @@ -51,6 +51,7 @@ extern int eol_nulls;
  extern int csum_length;
@@ -41,26 +41,26 @@ Do we need configure support for mktime()?
                if (!am_server && !am_daemon) {
                        rprintf(FERROR, "io timeout after %d seconds - exiting\n",
                                (int)(t-last_io));
---- orig/options.c     2005-01-25 03:26:51
-+++ options.c  2005-01-01 21:19:56
-@@ -102,6 +102,7 @@ int blocking_io = -1;
- int checksum_seed = 0;
+--- orig/options.c     2005-01-28 19:08:20
++++ options.c  2005-01-28 19:35:23
+@@ -102,6 +102,7 @@ int checksum_seed = 0;
  int inplace = 0;
+ int delay_updates = 0;
  long block_size = 0; /* "long" because popt can't set an int32. */
 +time_t stop_at_utime = 0;
  
  
  /** Network address family. **/
-@@ -319,6 +320,8 @@ void usage(enum logcode F)
-   rprintf(F,"     --password-file=FILE    get password from FILE\n");
+@@ -325,6 +326,8 @@ void usage(enum logcode F)
+   rprintf(F,"     --password-file=FILE    read password from FILE\n");
    rprintf(F,"     --list-only             list the files instead of copying them\n");
-   rprintf(F,"     --bwlimit=KBPS          limit I/O bandwidth, KBytes per second\n");
+   rprintf(F,"     --bwlimit=KBPS          limit I/O bandwidth; KBytes per second\n");
 +  rprintf(F,"     --stop-at=y-m-dTh:m     Stop rsync at year-month-dayThour:minute\n");
 +  rprintf(F,"     --time-limit=MINS       Stop rsync after MINS minutes have elapsed\n");
-   rprintf(F,"     --write-batch=FILE      write a batch to FILE\n");
-   rprintf(F,"     --read-batch=FILE       read a batch from FILE\n");
- #ifdef INET6
-@@ -336,6 +339,7 @@ enum {OPT_VERSION = 1000, OPT_DAEMON, OP
+   rprintf(F,"     --write-batch=FILE      write a batched update to FILE\n");
+   rprintf(F,"     --read-batch=FILE       read a batched update from FILE\n");
+ #if INET6
+@@ -342,6 +345,7 @@ enum {OPT_VERSION = 1000, OPT_DAEMON, OP
        OPT_FILTER, OPT_COMPARE_DEST, OPT_COPY_DEST, OPT_LINK_DEST,
        OPT_INCLUDE, OPT_INCLUDE_FROM, OPT_MODIFY_WINDOW,
        OPT_READ_BATCH, OPT_WRITE_BATCH, OPT_TIMEOUT, OPT_MAX_SIZE,
@@ -68,7 +68,7 @@ Do we need configure support for mktime()?
        OPT_REFUSED_BASE = 9000};
  
  static struct poptOption long_options[] = {
-@@ -415,6 +419,8 @@ static struct poptOption long_options[] 
+@@ -423,6 +427,8 @@ static struct poptOption long_options[] 
    {"port",             0,  POPT_ARG_INT,    &rsync_port, 0, 0, 0 },
    {"log-format",       0,  POPT_ARG_STRING, &log_format, 0, 0, 0 },
    {"bwlimit",          0,  POPT_ARG_INT,    &bwlimit, 0, 0, 0 },
@@ -77,7 +77,7 @@ Do we need configure support for mktime()?
    {"backup-dir",       0,  POPT_ARG_STRING, &backup_dir, 0, 0, 0 },
    {"hard-links",      'H', POPT_ARG_NONE,   &preserve_hard_links, 0, 0, 0 },
    {"read-batch",       0,  POPT_ARG_STRING, &batch_name, OPT_READ_BATCH, 0, 0 },
-@@ -788,6 +794,36 @@ int parse_arguments(int *argc, const cha
+@@ -802,6 +808,36 @@ int parse_arguments(int *argc, const cha
                        basis_dir[basis_dir_cnt++] = (char *)arg;
                        break;
  
@@ -114,7 +114,7 @@ Do we need configure support for mktime()?
                default:
                        /* A large opt value means that set_refuse_options()
                         * turned this option off (opt-BASE is its index). */
-@@ -1192,6 +1228,15 @@ void server_options(char **args,int *arg
+@@ -1210,6 +1246,15 @@ void server_options(char **args,int *arg
                args[ac++] = arg;
        }
  
@@ -130,18 +130,18 @@ Do we need configure support for mktime()?
        if (backup_dir) {
                args[ac++] = "--backup-dir";
                args[ac++] = backup_dir;
---- orig/rsync.yo      2005-01-25 03:26:51
-+++ rsync.yo   2004-07-15 02:44:40
-@@ -384,6 +384,8 @@ verb(
-      --password-file=FILE    get password from FILE
+--- orig/rsync.yo      2005-01-28 17:12:14
++++ rsync.yo   2005-01-28 19:35:35
+@@ -387,6 +387,8 @@ verb(
+      --password-file=FILE    read password from FILE
       --list-only             list the files instead of copying them
-      --bwlimit=KBPS          limit I/O bandwidth, KBytes per second
+      --bwlimit=KBPS          limit I/O bandwidth; KBytes per second
 +     --stop-at=y-m-dTh:m     Stop rsync at year-month-dayThour:minute
 +     --time-limit=MINS       Stop rsync after MINS minutes have elapsed
-      --write-batch=FILE      write a batch to FILE 
-      --read-batch=FILE       read a batch from FILE
-      --checksum-seed=NUM     set block/file checksum seed
-@@ -1090,6 +1092,19 @@ transfer was too fast, it will wait befo
+      --write-batch=FILE      write a batched update to FILE 
+      --read-batch=FILE       read a batched update from FILE
+      --checksum-seed=NUM     set block/file checksum seed (advanced)
+@@ -1124,6 +1126,19 @@ transfer was too fast, it will wait befo
  result is an average transfer rate equaling the specified limit. A value
  of zero specifies no limit.
  
@@ -161,7 +161,7 @@ Do we need configure support for mktime()?
  dit(bf(--write-batch=FILE)) Record a file that can later be applied to
  another identical destination with --read-batch. See the "BATCH MODE"
  section for details.
---- orig/util.c        2005-01-20 23:05:34
+--- orig/util.c        2005-01-28 19:08:20
 +++ util.c     2004-07-03 20:23:22
 @@ -126,6 +126,132 @@ void overflow(char *str)
        exit_cleanup(RERR_MALLOC);