X-Git-Url: https://mattmccutchen.net/rsync/rsync-patches.git/blobdiff_plain/afcb578c53a1c5579d48336e2197e476cead7057..0461b869d0800656bf41722c1a68800e728e45e5:/detect-renamed.diff diff --git a/detect-renamed.diff b/detect-renamed.diff index e531301..f63b881 100644 --- a/detect-renamed.diff +++ b/detect-renamed.diff @@ -19,10 +19,10 @@ memory than trying to keep track of the matches internally, and also allows any deletions or file-updates to occur normally without interfering with these alternate-basis discoveries. -After applying this patch, run these commands for a successful build: +To use this patch, run these commands for a successful build: - ./prepare-source - ./configure (optional if already run) + patch -p1 0 && strcmp(fn+k, backup_suffix) == 0; } @@ -415,30 +413,30 @@ TODO: if (do_progress && !am_server) rprintf(FINFO, " \r"); -@@ -753,6 +894,7 @@ static int try_dests_non(struct file_str - return -1; +@@ -843,6 +984,7 @@ static int try_dests_non(struct file_str + return j; } +static struct bitbag *delayed_bits = NULL; static int phase = 0; /* Acts on the_file_list->file's ndx'th item, whose name is fname. If a dir, -@@ -894,8 +1036,12 @@ static void recv_generator(char *fname, - && verbose && code && f_out != -1) - rprintf(code, "%s/\n", fname); +@@ -1028,8 +1170,12 @@ static void recv_generator(char *fname, + if (real_ret != 0 && one_file_system) + real_st.st_dev = filesystem_dev; if (delete_during && f_out != -1 && !phase && dry_run < 2 - && (file->flags & FLAG_DEL_HERE)) -- delete_in_dir(the_file_list, fname, file, &st); +- delete_in_dir(the_file_list, fname, file, &real_st); + && (file->flags & FLAG_DEL_HERE)) { -+ if (detect_renamed && statret != 0) ++ if (detect_renamed && real_ret != 0) + unexplored_dirs++; -+ delete_in_dir(the_file_list, fname, file, &st, ++ delete_in_dir(the_file_list, fname, file, &real_st, + delete_during < 0 ? DEL_NO_DELETIONS : 0); + } return; } -@@ -1133,8 +1279,14 @@ static void recv_generator(char *fname, +@@ -1273,8 +1419,14 @@ static void recv_generator(char *fname, && hard_link_check(file, ndx, fname, statret, &st, itemizing, code, HL_SKIP)) return; @@ -454,7 +452,7 @@ TODO: rsyserr(FERROR, stat_errno, "recv_generator: failed to stat %s", full_fname(fname)); return; -@@ -1309,11 +1461,17 @@ void generate_files(int f_out, struct fi +@@ -1460,11 +1612,17 @@ void generate_files(int f_out, struct fi (long)getpid(), flist->count); } @@ -473,7 +471,7 @@ TODO: whole_file = 0; if (verbose >= 2) { rprintf(FINFO, "delta-transmission %s\n", -@@ -1368,7 +1526,23 @@ void generate_files(int f_out, struct fi +@@ -1519,7 +1677,23 @@ void generate_files(int f_out, struct fi } recv_generator(NULL, NULL, 0, 0, 0, code, -1); if (delete_during) @@ -500,15 +498,15 @@ TODO: csum_length = SUM_LENGTH; --- old/options.c +++ new/options.c -@@ -78,6 +78,7 @@ int am_starting_up = 1; - int orig_umask = 0; +@@ -78,6 +78,7 @@ int am_generator = 0; + int am_starting_up = 1; int relative_paths = -1; int implied_dirs = 1; +int detect_renamed = 0; int numeric_ids = 0; int allow_8bit_chars = 0; int force_delete = 0; -@@ -335,6 +336,7 @@ void usage(enum logcode F) +@@ -346,6 +347,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"); @@ -516,7 +514,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"); -@@ -480,6 +482,7 @@ static struct poptOption long_options[] +@@ -499,6 +501,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 }, @@ -524,7 +522,7 @@ TODO: {"fuzzy", 'y', POPT_ARG_NONE, &fuzzy_basis, 0, 0, 0 }, {"compress", 'z', POPT_ARG_NONE, 0, 'z', 0, 0 }, {"compress-level", 0, POPT_ARG_INT, &def_compress_level, 'z', 0, 0 }, -@@ -1334,7 +1337,7 @@ int parse_arguments(int *argc, const cha +@@ -1362,7 +1365,7 @@ int parse_arguments(int *argc, const cha inplace = 1; } @@ -533,7 +531,7 @@ TODO: partial_dir = tmp_partialdir; if (inplace) { -@@ -1343,6 +1346,7 @@ int parse_arguments(int *argc, const cha +@@ -1371,6 +1374,7 @@ int parse_arguments(int *argc, const cha snprintf(err_buf, sizeof err_buf, "--%s cannot be used with --%s\n", append_mode ? "append" : "inplace", @@ -541,9 +539,18 @@ TODO: delay_updates ? "delay-updates" : "partial-dir"); return 0; } +@@ -1674,6 +1678,8 @@ void server_options(char **args,int *arg + args[ac++] = "--super"; + if (size_only) + args[ac++] = "--size-only"; ++ if (detect_renamed) ++ args[ac++] = "--detect-renamed"; + } + + if (modify_window_set) { --- old/rsync.yo +++ new/rsync.yo -@@ -358,6 +358,7 @@ to the detailed description below for a +@@ -363,6 +363,7 @@ to the detailed description below for a --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 @@ -551,7 +558,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 -@@ -1183,6 +1184,15 @@ Note that the use of the bf(--delete) op +@@ -1259,6 +1260,15 @@ Note that the use of the bf(--delete) op fuzzy-match files, so either use bf(--delete-after) or specify some filename exclusions if you need to prevent this. @@ -569,7 +576,7 @@ TODO: files against doing transfers (if the files are missing in the destination --- old/util.c +++ new/util.c -@@ -997,6 +997,32 @@ int handle_partial_dir(const char *fname +@@ -1025,6 +1025,32 @@ int handle_partial_dir(const char *fname return 1; }