X-Git-Url: https://mattmccutchen.net/rsync/rsync-patches.git/blobdiff_plain/e2e42a01ba5a2258edf1510280bb83864a0c8748..0ef5abcbbb95298fa9faf1d3eb275a9e76e1d951:/detect-renamed.diff diff --git a/detect-renamed.diff b/detect-renamed.diff index 161bafb..b40b8fa 100644 --- a/detect-renamed.diff +++ b/detect-renamed.diff @@ -43,7 +43,7 @@ diff --git a/compat.c b/compat.c extern int protect_args; extern int preserve_uid; extern int preserve_gid; -@@ -117,6 +118,7 @@ void set_allow_inc_recurse(void) +@@ -120,6 +121,7 @@ void set_allow_inc_recurse(void) allow_inc_recurse = 0; else if (!am_sender && (delete_before || delete_after @@ -62,7 +62,7 @@ diff --git a/flist.c b/flist.c extern int protocol_version; extern int sanitize_paths; extern int munge_symlinks; -@@ -120,6 +121,8 @@ static int64 tmp_dev, tmp_ino; +@@ -121,6 +122,8 @@ static int64 tmp_dev, tmp_ino; #endif static char tmp_sum[MAX_DIGEST_LEN]; @@ -71,7 +71,7 @@ diff --git a/flist.c b/flist.c static char empty_sum[MAX_DIGEST_LEN]; static int flist_count_offset; /* for --delete --progress */ static int dir_count = 0; -@@ -287,6 +290,45 @@ static int is_excluded(const char *fname, int is_dir, int filter_level) +@@ -288,6 +291,45 @@ static int is_excluded(const char *fname, int is_dir, int filter_level) return 0; } @@ -117,7 +117,7 @@ diff --git a/flist.c b/flist.c static void send_directory(int f, struct file_list *flist, char *fbuf, int len, int flags); -@@ -2281,6 +2323,25 @@ struct file_list *recv_file_list(int f) +@@ -2344,6 +2386,25 @@ struct file_list *recv_file_list(int f) flist_sort_and_clean(flist, relative_paths); @@ -413,7 +413,7 @@ diff --git a/generator.c b/generator.c /* If an item in dirlist is not found in flist, delete it * from the filesystem. */ for (i = dirlist->used; i--; ) { -@@ -521,19 +660,28 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev) +@@ -521,6 +660,10 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev) f_name(fp, NULL)); continue; } @@ -421,8 +421,10 @@ diff --git a/generator.c b/generator.c + strlcpy(p, fp->basename, remainder); + look_for_rename(fp, fbuf); + } - if (flist_find(cur_flist, fp) < 0) { - int flags = DEL_RECURSE; + /* Here we want to match regardless of file type. Replacement + * of a file with one of another type is handled separately by + * a delete_item call with a DEL_MAKE_ROOM flag. */ +@@ -529,14 +672,19 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev) if (!(fp->mode & S_IWUSR) && !am_root && (uid_t)F_OWNER(fp) == our_uid) flags |= DEL_NO_UID_WRITE; f_name(fp, delbuf); @@ -446,7 +448,7 @@ diff --git a/generator.c b/generator.c flist_free(dirlist); if (!save_uid_ndx) { -@@ -571,9 +719,9 @@ static void do_delete_pass(void) +@@ -574,9 +722,9 @@ static void do_delete_pass(void) || !S_ISDIR(st.st_mode)) continue; @@ -458,7 +460,7 @@ diff --git a/generator.c b/generator.c if (do_progress && !am_server) rprintf(FINFO, " \r"); -@@ -1226,6 +1374,7 @@ static void list_file_entry(struct file_struct *f) +@@ -1229,6 +1377,7 @@ static void list_file_entry(struct file_struct *f) } } @@ -466,7 +468,7 @@ diff --git a/generator.c b/generator.c static int phase = 0; static int dflt_perms; -@@ -1502,9 +1651,12 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1505,9 +1654,12 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, } else if (delete_during && f_out != -1 && !phase && !(file->flags & FLAG_MISSING_DIR)) { @@ -482,7 +484,7 @@ diff --git a/generator.c b/generator.c change_local_filter_dir(fname, strlen(fname), F_DEPTH(file)); } goto cleanup; -@@ -1782,8 +1934,14 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1785,8 +1937,14 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, goto cleanup; } #endif @@ -498,7 +500,7 @@ diff --git a/generator.c b/generator.c rsyserr(FERROR_XFER, stat_errno, "recv_generator: failed to stat %s", full_fname(fname)); goto cleanup; -@@ -2185,6 +2343,12 @@ void generate_files(int f_out, const char *local_name) +@@ -2187,6 +2345,12 @@ void generate_files(int f_out, const char *local_name) if (verbose > 2) rprintf(FINFO, "generator starting pid=%ld\n", (long)getpid()); @@ -511,7 +513,7 @@ diff --git a/generator.c b/generator.c if (delete_before && !solo_file && cur_flist->used > 0) do_delete_pass(); if (delete_during == 2) { -@@ -2195,7 +2359,7 @@ void generate_files(int f_out, const char *local_name) +@@ -2197,7 +2361,7 @@ void generate_files(int f_out, const char *local_name) } do_progress = 0; @@ -520,7 +522,7 @@ diff --git a/generator.c b/generator.c whole_file = 0; if (verbose >= 2) { rprintf(FINFO, "delta-transmission %s\n", -@@ -2237,7 +2401,7 @@ void generate_files(int f_out, const char *local_name) +@@ -2239,7 +2403,7 @@ void generate_files(int f_out, const char *local_name) dirdev = MAKEDEV(DEV_MAJOR(devp), DEV_MINOR(devp)); } else dirdev = MAKEDEV(0, 0); @@ -529,8 +531,8 @@ diff --git a/generator.c b/generator.c } else change_local_filter_dir(fbuf, strlen(fbuf), F_DEPTH(fp)); } -@@ -2284,7 +2448,21 @@ void generate_files(int f_out, const char *local_name) - } while ((cur_flist = cur_flist->next) != NULL); +@@ -2289,7 +2453,21 @@ void generate_files(int f_out, const char *local_name) + write_ndx(f_out, NDX_DONE); if (delete_during) - delete_in_dir(NULL, NULL, &dev_zero); @@ -563,7 +565,7 @@ diff --git a/options.c b/options.c int numeric_ids = 0; int allow_8bit_chars = 0; int force_delete = 0; -@@ -391,6 +392,7 @@ void usage(enum logcode F) +@@ -392,6 +393,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"); @@ -571,7 +573,7 @@ diff --git a/options.c b/options.c 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"); -@@ -578,6 +580,7 @@ static struct poptOption long_options[] = { +@@ -579,6 +581,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 }, @@ -579,7 +581,7 @@ diff --git a/options.c b/options.c {"fuzzy", 'y', POPT_ARG_VAL, &fuzzy_basis, 1, 0, 0 }, {"no-fuzzy", 0, POPT_ARG_VAL, &fuzzy_basis, 0, 0, 0 }, {"no-y", 0, POPT_ARG_VAL, &fuzzy_basis, 0, 0, 0 }, -@@ -1590,7 +1593,7 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -1591,7 +1594,7 @@ int parse_arguments(int *argc_p, const char ***argv_p) inplace = 1; } @@ -588,7 +590,7 @@ diff --git a/options.c b/options.c partial_dir = tmp_partialdir; if (inplace) { -@@ -1599,6 +1602,7 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -1600,6 +1603,7 @@ int parse_arguments(int *argc_p, const char ***argv_p) snprintf(err_buf, sizeof err_buf, "--%s cannot be used with --%s\n", append_mode ? "append" : "inplace", @@ -596,7 +598,7 @@ diff --git a/options.c b/options.c delay_updates ? "delay-updates" : "partial-dir"); return 0; } -@@ -1951,6 +1955,8 @@ void server_options(char **args, int *argc_p) +@@ -1961,6 +1965,8 @@ void server_options(char **args, int *argc_p) args[ac++] = "--super"; if (size_only) args[ac++] = "--size-only"; @@ -608,7 +610,7 @@ diff --git a/options.c b/options.c 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( +@@ -389,6 +389,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 @@ -616,7 +618,7 @@ diff --git a/rsync.yo b/rsync.yo --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 -@@ -1480,6 +1481,21 @@ Note that the use of the bf(--delete) option might get rid of any potential +@@ -1491,6 +1492,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. @@ -641,7 +643,7 @@ diff --git a/rsync.yo b/rsync.yo diff --git a/util.c b/util.c --- a/util.c +++ b/util.c -@@ -1125,6 +1125,32 @@ int handle_partial_dir(const char *fname, int create) +@@ -1168,6 +1168,32 @@ int handle_partial_dir(const char *fname, int create) return 1; }