The patches for 3.0.0pre6.
[rsync/rsync-patches.git] / detect-renamed.diff
index 706ccd9..5a2b3e1 100644 (file)
@@ -32,8 +32,9 @@ TODO:
   a file that can't use it, while missing out on giving it to a file
   that could use it.
 
   a file that can't use it, while missing out on giving it to a file
   that could use it.
 
---- old/compat.c
-+++ new/compat.c
+diff --git a/compat.c b/compat.c
+--- a/compat.c
++++ b/compat.c
 @@ -41,6 +41,7 @@ extern int checksum_seed;
  extern int basis_dir_cnt;
  extern int prune_empty_dirs;
 @@ -41,6 +41,7 @@ extern int checksum_seed;
  extern int basis_dir_cnt;
  extern int prune_empty_dirs;
@@ -50,8 +51,9 @@ TODO:
          || delay_updates || prune_empty_dirs))
                allow_inc_recurse = 0;
        else if (am_server && !local_server
          || delay_updates || prune_empty_dirs))
                allow_inc_recurse = 0;
        else if (am_server && !local_server
---- old/flist.c
-+++ new/flist.c
+diff --git a/flist.c b/flist.c
+--- a/flist.c
++++ b/flist.c
 @@ -61,6 +61,7 @@ extern int non_perishable_cnt;
  extern int prune_empty_dirs;
  extern int copy_links;
 @@ -61,6 +61,7 @@ extern int non_perishable_cnt;
  extern int prune_empty_dirs;
  extern int copy_links;
@@ -59,8 +61,8 @@ TODO:
 +extern int detect_renamed;
  extern int protocol_version;
  extern int sanitize_paths;
 +extern int detect_renamed;
  extern int protocol_version;
  extern int sanitize_paths;
- extern int need_unsorted_flist;
-@@ -117,6 +118,8 @@ static int64 tmp_dev, tmp_ino;
+ extern int munge_symlinks;
+@@ -118,6 +119,8 @@ static int64 tmp_dev, tmp_ino;
  #endif
  static char tmp_sum[MAX_DIGEST_LEN];
  
  #endif
  static char tmp_sum[MAX_DIGEST_LEN];
  
@@ -69,7 +71,7 @@ TODO:
  static char empty_sum[MAX_DIGEST_LEN];
  static int flist_count_offset; /* for --delete --progress */
  static int dir_count = 0;
  static char empty_sum[MAX_DIGEST_LEN];
  static int flist_count_offset; /* for --delete --progress */
  static int dir_count = 0;
-@@ -256,6 +259,45 @@ static int is_excluded(char *fname, int 
+@@ -262,6 +265,45 @@ static int is_excluded(char *fname, int is_dir, int filter_level)
        return 0;
  }
  
        return 0;
  }
  
@@ -115,7 +117,7 @@ TODO:
  static void send_directory(int f, struct file_list *flist,
                           char *fbuf, int len, int flags);
  
  static void send_directory(int f, struct file_list *flist,
                           char *fbuf, int len, int flags);
  
-@@ -2169,6 +2211,25 @@ struct file_list *recv_file_list(int f)
+@@ -2183,6 +2225,25 @@ struct file_list *recv_file_list(int f)
  
        clean_flist(flist, relative_paths);
  
  
        clean_flist(flist, relative_paths);
  
@@ -141,8 +143,9 @@ TODO:
        if (protocol_version < 30) {
                /* Recv the io_error flag */
                if (ignore_errors)
        if (protocol_version < 30) {
                /* Recv the io_error flag */
                if (ignore_errors)
---- old/generator.c
-+++ new/generator.c
+diff --git a/generator.c b/generator.c
+--- a/generator.c
++++ b/generator.c
 @@ -79,6 +79,7 @@ extern char *basis_dir[];
  extern int compare_dest;
  extern int copy_dest;
 @@ -79,6 +79,7 @@ extern char *basis_dir[];
  extern int compare_dest;
  extern int copy_dest;
@@ -299,7 +302,7 @@ TODO:
   */
  static enum delret delete_item(char *fbuf, int mode, char *replace, int flags)
  {
   */
  static enum delret delete_item(char *fbuf, int mode, char *replace, int flags)
  {
-@@ -160,6 +274,8 @@ static enum delret delete_item(char *fbu
+@@ -160,6 +274,8 @@ static enum delret delete_item(char *fbuf, int mode, char *replace, int flags)
                        goto check_ret;
                /* OK: try to delete the directory. */
        }
                        goto check_ret;
                /* OK: try to delete the directory. */
        }
@@ -308,7 +311,7 @@ TODO:
  
        if (!replace && max_delete >= 0 && ++deletion_count > max_delete)
                return DR_AT_LIMIT;
  
        if (!replace && max_delete >= 0 && ++deletion_count > max_delete)
                return DR_AT_LIMIT;
-@@ -206,6 +322,8 @@ static enum delret delete_item(char *fbu
+@@ -206,6 +322,8 @@ static enum delret delete_item(char *fbuf, int mode, char *replace, int flags)
   * its contents, otherwise just checks for content.  Returns DR_SUCCESS or
   * DR_NOT_EMPTY.  Note that fname must point to a MAXPATHLEN buffer!  (The
   * buffer is used for recursion, but returned unchanged.)
   * its contents, otherwise just checks for content.  Returns DR_SUCCESS or
   * DR_NOT_EMPTY.  Note that fname must point to a MAXPATHLEN buffer!  (The
   * buffer is used for recursion, but returned unchanged.)
@@ -317,7 +320,7 @@ TODO:
   */
  static enum delret delete_dir_contents(char *fname, int flags)
  {
   */
  static enum delret delete_dir_contents(char *fname, int flags)
  {
-@@ -225,7 +343,9 @@ static enum delret delete_dir_contents(c
+@@ -225,7 +343,9 @@ static enum delret delete_dir_contents(char *fname, int flags)
        save_filters = push_local_filters(fname, dlen);
  
        non_perishable_cnt = 0;
        save_filters = push_local_filters(fname, dlen);
  
        non_perishable_cnt = 0;
@@ -327,7 +330,7 @@ TODO:
        ret = non_perishable_cnt ? DR_NOT_EMPTY : DR_SUCCESS;
  
        if (!dirlist->used)
        ret = non_perishable_cnt ? DR_NOT_EMPTY : DR_SUCCESS;
  
        if (!dirlist->used)
-@@ -262,6 +382,8 @@ static enum delret delete_dir_contents(c
+@@ -262,6 +382,8 @@ static enum delret delete_dir_contents(char *fname, int flags)
                if (S_ISDIR(fp->mode)
                 && delete_dir_contents(fname, flags | DEL_RECURSE) != DR_SUCCESS)
                        ret = DR_NOT_EMPTY;
                if (S_ISDIR(fp->mode)
                 && delete_dir_contents(fname, flags | DEL_RECURSE) != DR_SUCCESS)
                        ret = DR_NOT_EMPTY;
@@ -336,7 +339,7 @@ TODO:
                if (delete_item(fname, fp->mode, NULL, flags) != DR_SUCCESS)
                        ret = DR_NOT_EMPTY;
        }
                if (delete_item(fname, fp->mode, NULL, flags) != DR_SUCCESS)
                        ret = DR_NOT_EMPTY;
        }
-@@ -414,13 +536,18 @@ static void do_delayed_deletions(char *d
+@@ -414,13 +536,18 @@ static void do_delayed_deletions(char *delbuf)
   * all the --delete-WHEN options.  Note that the fbuf pointer must point to a
   * MAXPATHLEN buffer with the name of the directory in it (the functions we
   * call will append names onto the end, but the old dir value will be restored
   * all the --delete-WHEN options.  Note that the fbuf pointer must point to a
   * MAXPATHLEN buffer with the name of the directory in it (the functions we
   * call will append names onto the end, but the old dir value will be restored
@@ -359,7 +362,7 @@ TODO:
  
        if (!fbuf) {
                change_local_filter_dir(NULL, 0, 0);
  
        if (!fbuf) {
                change_local_filter_dir(NULL, 0, 0);
-@@ -430,21 +557,28 @@ static void delete_in_dir(char *fbuf, st
+@@ -430,21 +557,28 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev)
        if (verbose > 2)
                rprintf(FINFO, "delete_in_dir(%s)\n", fbuf);
  
        if (verbose > 2)
                rprintf(FINFO, "delete_in_dir(%s)\n", fbuf);
  
@@ -393,7 +396,7 @@ TODO:
        if (one_file_system) {
                if (file->flags & FLAG_TOP_DIR)
                        filesystem_dev = *fs_dev;
        if (one_file_system) {
                if (file->flags & FLAG_TOP_DIR)
                        filesystem_dev = *fs_dev;
-@@ -454,6 +588,14 @@ static void delete_in_dir(char *fbuf, st
+@@ -454,6 +588,14 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev)
  
        dirlist = get_dirlist(fbuf, dlen, 0);
  
  
        dirlist = get_dirlist(fbuf, dlen, 0);
  
@@ -408,7 +411,7 @@ TODO:
        /* If an item in dirlist is not found in flist, delete it
         * from the filesystem. */
        for (i = dirlist->used; i--; ) {
        /* If an item in dirlist is not found in flist, delete it
         * from the filesystem. */
        for (i = dirlist->used; i--; ) {
-@@ -466,16 +608,25 @@ static void delete_in_dir(char *fbuf, st
+@@ -466,16 +608,25 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev)
                                        f_name(fp, NULL));
                        continue;
                }
                                        f_name(fp, NULL));
                        continue;
                }
@@ -449,7 +452,7 @@ TODO:
  
        if (do_progress && !am_server)
                rprintf(FINFO, "                    \r");
  
        if (do_progress && !am_server)
                rprintf(FINFO, "                    \r");
-@@ -1139,6 +1290,7 @@ static void list_file_entry(struct file_
+@@ -1139,6 +1290,7 @@ static void list_file_entry(struct file_struct *f)
        }
  }
  
        }
  }
  
@@ -457,7 +460,7 @@ TODO:
  static int phase = 0;
  static int dflt_perms;
  
  static int phase = 0;
  static int dflt_perms;
  
-@@ -1383,8 +1535,12 @@ static void recv_generator(char *fname, 
+@@ -1383,8 +1535,12 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
                        }
                }
                else if (delete_during && f_out != -1 && !phase && dry_run < 2
                        }
                }
                else if (delete_during && f_out != -1 && !phase && dry_run < 2
@@ -472,7 +475,7 @@ TODO:
                goto cleanup;
        }
  
                goto cleanup;
        }
  
-@@ -1662,8 +1818,14 @@ static void recv_generator(char *fname, 
+@@ -1662,8 +1818,14 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
                        goto cleanup;
                }
  #endif
                        goto cleanup;
                }
  #endif
@@ -485,10 +488,10 @@ TODO:
 +                      }
                        goto notify_others;
 +              }
 +                      }
                        goto notify_others;
 +              }
-               rsyserr(FERROR, stat_errno, "recv_generator: failed to stat %s",
+               rsyserr(FERROR_XFER, stat_errno, "recv_generator: failed to stat %s",
                        full_fname(fname));
                goto cleanup;
                        full_fname(fname));
                goto cleanup;
-@@ -2000,6 +2162,12 @@ void generate_files(int f_out, const cha
+@@ -2000,6 +2162,12 @@ void generate_files(int f_out, const char *local_name)
        if (verbose > 2)
                rprintf(FINFO, "generator starting pid=%ld\n", (long)getpid());
  
        if (verbose > 2)
                rprintf(FINFO, "generator starting pid=%ld\n", (long)getpid());
  
@@ -501,7 +504,7 @@ TODO:
        if (delete_before && !solo_file && cur_flist->used > 0)
                do_delete_pass();
        if (delete_during == 2) {
        if (delete_before && !solo_file && cur_flist->used > 0)
                do_delete_pass();
        if (delete_during == 2) {
-@@ -2010,7 +2178,7 @@ void generate_files(int f_out, const cha
+@@ -2010,7 +2178,7 @@ void generate_files(int f_out, const char *local_name)
        }
        do_progress = 0;
  
        }
        do_progress = 0;
  
@@ -510,7 +513,7 @@ TODO:
                whole_file = 0;
        if (verbose >= 2) {
                rprintf(FINFO, "delta-transmission %s\n",
                whole_file = 0;
        if (verbose >= 2) {
                rprintf(FINFO, "delta-transmission %s\n",
-@@ -2048,7 +2216,7 @@ void generate_files(int f_out, const cha
+@@ -2048,7 +2216,7 @@ void generate_files(int f_out, const char *local_name)
                                                dirdev = MAKEDEV(DEV_MAJOR(devp), DEV_MINOR(devp));
                                        } else
                                                dirdev = MAKEDEV(0, 0);
                                                dirdev = MAKEDEV(DEV_MAJOR(devp), DEV_MINOR(devp));
                                        } else
                                                dirdev = MAKEDEV(0, 0);
@@ -519,7 +522,7 @@ TODO:
                                }
                        }
                }
                                }
                        }
                }
-@@ -2091,7 +2259,21 @@ void generate_files(int f_out, const cha
+@@ -2091,7 +2259,21 @@ void generate_files(int f_out, const char *local_name)
        } while ((cur_flist = cur_flist->next) != NULL);
  
        if (delete_during)
        } while ((cur_flist = cur_flist->next) != NULL);
  
        if (delete_during)
@@ -542,8 +545,9 @@ TODO:
        phase++;
        if (verbose > 2)
                rprintf(FINFO, "generate_files phase=%d\n", phase);
        phase++;
        if (verbose > 2)
                rprintf(FINFO, "generate_files phase=%d\n", phase);
---- old/options.c
-+++ new/options.c
+diff --git a/options.c b/options.c
+--- a/options.c
++++ b/options.c
 @@ -80,6 +80,7 @@ int am_generator = 0;
  int am_starting_up = 1;
  int relative_paths = -1;
 @@ -80,6 +80,7 @@ int am_generator = 0;
  int am_starting_up = 1;
  int relative_paths = -1;
@@ -552,7 +556,7 @@ TODO:
  int numeric_ids = 0;
  int allow_8bit_chars = 0;
  int force_delete = 0;
  int numeric_ids = 0;
  int allow_8bit_chars = 0;
  int force_delete = 0;
-@@ -383,6 +384,7 @@ void usage(enum logcode F)
+@@ -385,6 +386,7 @@ void usage(enum logcode F)
    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," -y, --fuzzy                 find similar file for basis if no dest file\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," -y, --fuzzy                 find similar file for basis if no dest file\n");
@@ -560,7 +564,7 @@ TODO:
    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,"     --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");
-@@ -561,6 +563,7 @@ static struct poptOption long_options[] 
+@@ -563,6 +565,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 },
    {"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 },
@@ -568,7 +572,7 @@ TODO:
    {"fuzzy",           'y', POPT_ARG_NONE,   &fuzzy_basis, 0, 0, 0 },
    {"compress",        'z', POPT_ARG_NONE,   0, 'z', 0, 0 },
    {"no-compress",      0,  POPT_ARG_VAL,    &do_compression, 0, 0, 0 },
    {"fuzzy",           'y', POPT_ARG_NONE,   &fuzzy_basis, 0, 0, 0 },
    {"compress",        'z', POPT_ARG_NONE,   0, 'z', 0, 0 },
    {"no-compress",      0,  POPT_ARG_VAL,    &do_compression, 0, 0, 0 },
-@@ -1532,7 +1535,7 @@ int parse_arguments(int *argc_p, const c
+@@ -1535,7 +1538,7 @@ int parse_arguments(int *argc_p, const char ***argv_p, int frommain)
                inplace = 1;
        }
  
                inplace = 1;
        }
  
@@ -577,7 +581,7 @@ TODO:
                partial_dir = tmp_partialdir;
  
        if (inplace) {
                partial_dir = tmp_partialdir;
  
        if (inplace) {
-@@ -1541,6 +1544,7 @@ int parse_arguments(int *argc_p, const c
+@@ -1544,6 +1547,7 @@ int parse_arguments(int *argc_p, const char ***argv_p, int frommain)
                        snprintf(err_buf, sizeof err_buf,
                                 "--%s cannot be used with --%s\n",
                                 append_mode ? "append" : "inplace",
                        snprintf(err_buf, sizeof err_buf,
                                 "--%s cannot be used with --%s\n",
                                 append_mode ? "append" : "inplace",
@@ -585,7 +589,7 @@ TODO:
                                 delay_updates ? "delay-updates" : "partial-dir");
                        return 0;
                }
                                 delay_updates ? "delay-updates" : "partial-dir");
                        return 0;
                }
-@@ -1885,6 +1889,8 @@ void server_options(char **args, int *ar
+@@ -1888,6 +1892,8 @@ void server_options(char **args, int *argc_p)
                        args[ac++] = "--super";
                if (size_only)
                        args[ac++] = "--size-only";
                        args[ac++] = "--super";
                if (size_only)
                        args[ac++] = "--size-only";
@@ -594,9 +598,10 @@ TODO:
        } else {
                if (skip_compress) {
                        if (asprintf(&arg, "--skip-compress=%s", skip_compress) < 0)
        } else {
                if (skip_compress) {
                        if (asprintf(&arg, "--skip-compress=%s", skip_compress) < 0)
---- old/rsync.yo
-+++ new/rsync.yo
-@@ -384,6 +384,7 @@ to the detailed description below for a 
+diff --git a/rsync.yo b/rsync.yo
+--- a/rsync.yo
++++ b/rsync.yo
+@@ -385,6 +385,7 @@ to the detailed description below for a complete description.  verb(
       --modify-window=NUM     compare mod-times with reduced accuracy
   -T, --temp-dir=DIR          create temporary files in directory DIR
   -y, --fuzzy                 find similar file for basis if no dest file
       --modify-window=NUM     compare mod-times with reduced accuracy
   -T, --temp-dir=DIR          create temporary files in directory DIR
   -y, --fuzzy                 find similar file for basis if no dest file
@@ -604,7 +609,7 @@ TODO:
       --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
       --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
-@@ -1438,6 +1439,21 @@ Note that the use of the bf(--delete) op
+@@ -1451,6 +1452,21 @@ Note that the use of the bf(--delete) option might get rid of any potential
  fuzzy-match files, so either use bf(--delete-after) or specify some
  filename exclusions if you need to prevent this.
  
  fuzzy-match files, so either use bf(--delete-after) or specify some
  filename exclusions if you need to prevent this.
  
@@ -626,9 +631,10 @@ TODO:
  dit(bf(--compare-dest=DIR)) This option instructs rsync to use em(DIR) on
  the destination machine as an additional hierarchy to compare destination
  files against doing transfers (if the files are missing in the destination
  dit(bf(--compare-dest=DIR)) This option instructs rsync to use em(DIR) on
  the destination machine as an additional hierarchy to compare destination
  files against doing transfers (if the files are missing in the destination
---- old/util.c
-+++ new/util.c
-@@ -1042,6 +1042,32 @@ int handle_partial_dir(const char *fname
+diff --git a/util.c b/util.c
+--- a/util.c
++++ b/util.c
+@@ -1019,6 +1019,32 @@ int handle_partial_dir(const char *fname, int create)
        return 1;
  }
  
        return 1;
  }