From: Wayne Davison Date: Sat, 3 Jul 2004 21:22:30 +0000 (+0000) Subject: Use the new diff-dependency feature to make the patch depend on X-Git-Url: https://mattmccutchen.net/rsync/rsync-patches.git/commitdiff_plain/824abc86d2bf611e694c15a99b1cff345c331654 Use the new diff-dependency feature to make the patch depend on g2r-basis-filename.diff. Updated the format using the new verify-patches script. --- diff --git a/compare-dest.diff b/compare-dest.diff index 88ae3dc..c01c3ca 100644 --- a/compare-dest.diff +++ b/compare-dest.diff @@ -1,3 +1,5 @@ +Depends-On-Patch: g2r-basis-filename.diff + This patch allows multiple --compare-dest or --link-dest options to be used, making the transfer of some files more optimal. Note that the algorithm does NOT search for the best match -- it stops at the first @@ -7,8 +9,8 @@ they are suppled). Before compiling, be sure to run "make proto". ---- generator.c 30 Jun 2004 07:27:30 -0000 1.93 -+++ generator.c 30 Jun 2004 07:40:25 -0000 +--- orig/generator.c 2004-07-03 20:08:07 ++++ generator.c 2004-07-03 20:14:37 @@ -42,7 +42,7 @@ extern int size_only; extern int io_timeout; extern int protocol_version; @@ -37,16 +39,7 @@ Before compiling, be sure to run "make proto". } file_checksum(fname,sum,st->st_size); return memcmp(sum, file->u.sum, protocol_version < 21 ? 2 -@@ -267,7 +266,7 @@ static void generate_and_send_sums(struc - * out. It might be wrong. - */ - static void recv_generator(char *fname, struct file_struct *file, int i, -- int f_out) -+ int f_out, int f_nameout) - { - int fd; - STRUCT_STAT st; -@@ -424,15 +423,22 @@ static void recv_generator(char *fname, +@@ -424,13 +423,18 @@ static void recv_generator(char *fname, fnamecmp = fname; @@ -58,7 +51,6 @@ Before compiling, be sure to run "make proto". - statret = link_stat(fnamecmpbuf, &st, 0); - if (!S_ISREG(st.st_mode)) - statret = -1; -- if (statret == -1) + int i; + for (i = 0; compare_dest[i] != NULL; i++) { + pathjoin(fnamecmpbuf, sizeof fnamecmpbuf, compare_dest[i], fname); @@ -68,203 +60,11 @@ Before compiling, be sure to run "make proto". + statret = -1; + } + } -+ if (statret < 0) { + if (statret < 0) { errno = saveerrno; -+ *fnamecmpbuf = '\0'; -+ } - #if HAVE_LINK - else if (link_dest && !dry_run) { - if (do_link(fnamecmpbuf, fname) != 0) { -@@ -440,18 +446,22 @@ static void recv_generator(char *fname, - rsyserr(FINFO, errno, "link %s => %s", - fnamecmpbuf, fname); - } -- } -- fnamecmp = fnamecmpbuf; -+ fnamecmp = fnamecmpbuf; -+ } else -+ *fnamecmpbuf = '\0'; - } - #endif - else - fnamecmp = fnamecmpbuf; -- } -+ } else -+ *fnamecmpbuf = '\0'; - - if (statret == -1) { - if (preserve_hard_links && hard_link_check(file, HL_SKIP)) - return; - if (errno == ENOENT) { -+ if (f_nameout >= 0) -+ write(f_nameout, "", 1); - write_int(f_out,i); - if (!dry_run) - write_sum_head(f_out, NULL); -@@ -471,19 +481,21 @@ static void recv_generator(char *fname, - /* now pretend the file didn't exist */ - if (preserve_hard_links && hard_link_check(file, HL_SKIP)) - return; -+ if (f_nameout >= 0) -+ write(f_nameout, "", 1); - write_int(f_out,i); - if (!dry_run) - write_sum_head(f_out, NULL); - return; - } - -- if (opt_ignore_existing && fnamecmp == fname) { -+ if (opt_ignore_existing && !*fnamecmpbuf) { - if (verbose > 1) - rprintf(FINFO,"%s exists\n",fname); - return; - } - -- if (update_only && fnamecmp == fname -+ if (update_only && !*fnamecmpbuf - && cmp_modtime(st.st_mtime, file->modtime) > 0) { - if (verbose > 1) - rprintf(FINFO,"%s is newer\n",fname); -@@ -491,17 +503,21 @@ static void recv_generator(char *fname, - } - - if (skip_file(fname, file, &st)) { -- if (fnamecmp == fname) -+ if (!*fnamecmpbuf) - set_perms(fname, file, &st, PERMS_REPORT); - return; - } - - if (dry_run) { -+ if (f_nameout >= 0) -+ write(f_nameout, "", 1); - write_int(f_out,i); - return; - } - - if (disable_deltas_p()) { -+ if (f_nameout >= 0) -+ write(f_nameout, "", 1); - write_int(f_out,i); - write_sum_head(f_out, NULL); - return; -@@ -516,6 +532,8 @@ static void recv_generator(char *fname, - /* pretend the file didn't exist */ - if (preserve_hard_links && hard_link_check(file, HL_SKIP)) - return; -+ if (f_nameout >= 0) -+ write(f_nameout, "", 1); - write_int(f_out,i); - write_sum_head(f_out, NULL); - return; -@@ -534,6 +552,8 @@ static void recv_generator(char *fname, - if (verbose > 2) - rprintf(FINFO, "generating and sending sums for %d\n", i); - -+ if (f_nameout >= 0) -+ write(f_nameout, fnamecmpbuf, strlen(fnamecmpbuf) + 1); - write_int(f_out,i); - generate_and_send_sums(mapbuf, st.st_size, f_out); - -@@ -543,7 +563,8 @@ static void recv_generator(char *fname, - } - - --void generate_files(int f, struct file_list *flist, char *local_name) -+void generate_files(int f, struct file_list *flist, char *local_name, -+ int f_nameout) - { - int i; - int phase = 0; -@@ -584,7 +605,7 @@ void generate_files(int f, struct file_l - } - - recv_generator(local_name ? local_name : f_name_to(file, fbuf), -- file, i, f); -+ file, i, f, f_nameout); - } - - phase++; -@@ -601,7 +622,7 @@ void generate_files(int f, struct file_l - while ((i = get_redo_num()) != -1) { - struct file_struct *file = flist->files[i]; - recv_generator(local_name ? local_name : f_name_to(file, fbuf), -- file, i, f); -+ file, i, f, f_nameout); - } - - phase++; -@@ -620,7 +641,7 @@ void generate_files(int f, struct file_l - if (!file->basename || !S_ISDIR(file->mode)) - continue; - recv_generator(local_name ? local_name : f_name(file), -- file, i, -1); -+ file, i, -1, -1); - } - - if (verbose > 2) ---- main.c 30 Jun 2004 07:27:30 -0000 1.202 -+++ main.c 30 Jun 2004 07:40:25 -0000 -@@ -429,7 +429,7 @@ static int do_recv(int f_in,int f_out,st - { - int pid; - int status = 0; -- int error_pipe[2]; -+ int error_pipe[2], name_pipe[2]; - - if (preserve_hard_links) - init_hard_links(flist); -@@ -441,8 +441,8 @@ static int do_recv(int f_in,int f_out,st - } - } - -- if (fd_pair(error_pipe) < 0) { -- rprintf(FERROR,"error pipe failed in do_recv\n"); -+ if (fd_pair(error_pipe) < 0 || fd_pair(name_pipe) < 0) { -+ rprintf(FERROR, "fd_pair() failed in do_recv\n"); - exit_cleanup(RERR_SOCKETIO); - } - -@@ -450,8 +450,10 @@ static int do_recv(int f_in,int f_out,st - - if ((pid = do_fork()) == 0) { - close(error_pipe[0]); -+ close(name_pipe[1]); - if (f_in != f_out) - close(f_out); -+ set_blocking(name_pipe[0]); - - /* we can't let two processes write to the socket at one time */ - io_multiplexing_close(); -@@ -459,7 +461,7 @@ static int do_recv(int f_in,int f_out,st - /* set place to send errors */ - set_msg_fd_out(error_pipe[1]); - -- recv_files(f_in,flist,local_name); -+ recv_files(f_in, flist, local_name, name_pipe[0]); - io_flush(FULL_FLUSH); - report(f_in); - -@@ -475,14 +477,16 @@ static int do_recv(int f_in,int f_out,st - am_generator = 1; - - close(error_pipe[1]); -+ close(name_pipe[0]); - if (f_in != f_out) - close(f_in); -+ set_blocking(name_pipe[1]); - - io_start_buffering_out(f_out); - - set_msg_fd_in(error_pipe[0]); - -- generate_files(f_out, flist, local_name); -+ generate_files(f_out, flist, local_name, name_pipe[1]); - - get_redo_num(); /* Read final MSG_DONE and any prior messages. */ - report(-1); ---- options.c 20 Jun 2004 19:47:05 -0000 1.157 -+++ options.c 30 Jun 2004 07:40:26 -0000 + *fnamecmpbuf = '\0'; +--- orig/options.c 2004-06-20 19:30:00 ++++ options.c 2004-07-03 17:33:30 @@ -117,7 +117,8 @@ unsigned int backup_dir_remainder; char *backup_suffix = NULL; @@ -391,8 +191,8 @@ Before compiling, be sure to run "make proto". } if (files_from && (!am_sender || remote_filesfrom_file)) { ---- receiver.c 30 Jun 2004 07:27:30 -0000 1.84 -+++ receiver.c 30 Jun 2004 07:40:26 -0000 +--- orig/receiver.c 2004-07-03 20:08:07 ++++ receiver.c 2004-07-03 20:14:37 @@ -36,7 +36,6 @@ extern int preserve_perms; extern int cvs_exclude; extern int io_error; @@ -401,64 +201,8 @@ Before compiling, be sure to run "make proto". extern int make_backups; extern int do_progress; extern char *backup_dir; -@@ -293,14 +292,15 @@ static int receive_data(int f_in,struct - * main routine for receiver process. - * - * Receiver process runs on the same host as the generator process. */ --int recv_files(int f_in,struct file_list *flist,char *local_name) -+int recv_files(int f_in, struct file_list *flist, char *local_name, -+ int f_name) - { - int fd1,fd2; - STRUCT_STAT st; - char *fname, fbuf[MAXPATHLEN]; - char template[MAXPATHLEN]; - char fnametmp[MAXPATHLEN]; -- char *fnamecmp; -+ char *fnamecmp, *cp; - char fnamecmpbuf[MAXPATHLEN]; - struct map_struct *mapbuf; - struct file_struct *file; -@@ -364,19 +364,19 @@ int recv_files(int f_in,struct file_list - if (verbose > 2) - rprintf(FINFO,"recv_files(%s)\n",fname); - -- fnamecmp = fname; -+ for (cp = fnamecmpbuf; ; cp++) { -+ if (read(f_name, cp, 1) <= 0) { -+ rsyserr(FERROR, errno, "fname-pipe read failed"); -+ exit_cleanup(RERR_PROTOCOL); -+ } -+ if (!*cp) -+ break; -+ } -+ fnamecmp = *fnamecmpbuf ? fnamecmpbuf : fname; - - /* open the file */ - fd1 = do_open(fnamecmp, O_RDONLY, 0); - -- if (fd1 == -1 && compare_dest != NULL) { -- /* try the file at compare_dest instead */ -- pathjoin(fnamecmpbuf, sizeof fnamecmpbuf, -- compare_dest, fname); -- fnamecmp = fnamecmpbuf; -- fd1 = do_open(fnamecmp, O_RDONLY, 0); -- } -- - if (fd1 != -1 && do_fstat(fd1,&st) != 0) { - rsyserr(FERROR, errno, "fstat %s failed", - full_fname(fnamecmp)); -@@ -385,7 +385,7 @@ int recv_files(int f_in,struct file_list - continue; - } - -- if (fd1 != -1 && S_ISDIR(st.st_mode) && fnamecmp == fname) { -+ if (fd1 != -1 && S_ISDIR(st.st_mode) && !*fnamecmpbuf) { - /* this special handling for directories - * wouldn't be necessary if robust_rename() - * and the underlying robust_unlink could cope ---- rsync.h 16 May 2004 07:28:24 -0000 1.204 -+++ rsync.h 30 Jun 2004 07:40:26 -0000 +--- orig/rsync.h 2004-05-16 07:58:12 ++++ rsync.h 2004-07-03 17:33:30 @@ -98,6 +98,8 @@ #define MAX_ARGS 1000 diff --git a/fuzzy.diff b/fuzzy.diff index 0a31901..ebdbae4 100644 --- a/fuzzy.diff +++ b/fuzzy.diff @@ -1,11 +1,13 @@ -Wayne Davison wrote: +Depends-On-Patch: g2r-basis-filename.diff -I greatly simplified the changes to generator.c, making the patch +The changes to generator.c were greatly simplified, making the patch easier to maintain and fixing the failing test in the testsuite. Very lightly tested. ---- generator.c 30 Jun 2004 07:27:30 -0000 1.93 -+++ generator.c 30 Jun 2004 07:43:46 -0000 +Be sure to run "make proto" before "make". + +--- orig/generator.c 2004-07-03 20:08:07 ++++ generator.c 2004-07-03 20:09:05 @@ -41,6 +41,7 @@ extern int ignore_times; extern int size_only; extern int io_timeout; @@ -109,13 +111,7 @@ Very lightly tested. /* * Acts on file number @p i from @p flist, whose name is @p fname. -@@ -267,12 +356,12 @@ static void generate_and_send_sums(struc - * out. It might be wrong. - */ - static void recv_generator(char *fname, struct file_struct *file, int i, -- int f_out) -+ int f_out, int f_nameout) - { +@@ -272,7 +361,7 @@ static void recv_generator(char *fname, int fd; STRUCT_STAT st; struct map_struct *mapbuf; @@ -124,216 +120,32 @@ Very lightly tested. char *fnamecmp; char fnamecmpbuf[MAXPATHLEN]; -@@ -431,8 +520,10 @@ static void recv_generator(char *fname, - statret = link_stat(fnamecmpbuf, &st, 0); - if (!S_ISREG(st.st_mode)) - statret = -1; -- if (statret == -1) -+ if (statret < 0) { - errno = saveerrno; -+ *fnamecmpbuf = '\0'; -+ } - #if HAVE_LINK - else if (link_dest && !dry_run) { - if (do_link(fnamecmpbuf, fname) != 0) { -@@ -440,18 +531,30 @@ static void recv_generator(char *fname, - rsyserr(FINFO, errno, "link %s => %s", - fnamecmpbuf, fname); - } -- } -- fnamecmp = fnamecmpbuf; -+ fnamecmp = fnamecmpbuf; -+ } else -+ *fnamecmpbuf = '\0'; - } - #endif - else - fnamecmp = fnamecmpbuf; -+ } else -+ *fnamecmpbuf = '\0'; -+ +@@ -452,6 +541,14 @@ static void recv_generator(char *fname, + } else + *fnamecmpbuf = '\0'; + + if (statret == -1 && fuzzy) { + statret = find_fuzzy(&fnamecmp, fnamecmpbuf, &st); + if (!S_ISREG(st.st_mode)) + statret = -1; + else + fuzzy_file = 1; - } - ++ } ++ if (statret == -1) { if (preserve_hard_links && hard_link_check(file, HL_SKIP)) return; - if (errno == ENOENT) { -+ if (f_nameout >= 0) -+ write(f_nameout, "", 1); - write_int(f_out,i); - if (!dry_run) - write_sum_head(f_out, NULL); -@@ -471,37 +574,43 @@ static void recv_generator(char *fname, - /* now pretend the file didn't exist */ - if (preserve_hard_links && hard_link_check(file, HL_SKIP)) - return; -+ if (f_nameout >= 0) -+ write(f_nameout, "", 1); - write_int(f_out,i); - if (!dry_run) - write_sum_head(f_out, NULL); - return; - } - -- if (opt_ignore_existing && fnamecmp == fname) { -+ if (opt_ignore_existing && !*fnamecmpbuf) { - if (verbose > 1) - rprintf(FINFO,"%s exists\n",fname); - return; - } - -- if (update_only && fnamecmp == fname -+ if (update_only && !*fnamecmpbuf - && cmp_modtime(st.st_mtime, file->modtime) > 0) { - if (verbose > 1) - rprintf(FINFO,"%s is newer\n",fname); +@@ -498,7 +595,7 @@ static void recv_generator(char *fname, return; } - if (skip_file(fname, file, &st)) { -- if (fnamecmp == fname) + if (!fuzzy_file && skip_file(fname, file, &st)) { -+ if (!*fnamecmpbuf) + if (!*fnamecmpbuf) set_perms(fname, file, &st, PERMS_REPORT); return; - } - - if (dry_run) { -+ if (f_nameout >= 0) -+ write(f_nameout, "", 1); - write_int(f_out,i); - return; - } - - if (disable_deltas_p()) { -+ if (f_nameout >= 0) -+ write(f_nameout, "", 1); - write_int(f_out,i); - write_sum_head(f_out, NULL); - return; -@@ -516,6 +625,8 @@ static void recv_generator(char *fname, - /* pretend the file didn't exist */ - if (preserve_hard_links && hard_link_check(file, HL_SKIP)) - return; -+ if (f_nameout >= 0) -+ write(f_nameout, "", 1); - write_int(f_out,i); - write_sum_head(f_out, NULL); - return; -@@ -534,6 +645,8 @@ static void recv_generator(char *fname, - if (verbose > 2) - rprintf(FINFO, "generating and sending sums for %d\n", i); - -+ if (f_nameout >= 0) -+ write(f_nameout, fnamecmpbuf, strlen(fnamecmpbuf) + 1); - write_int(f_out,i); - generate_and_send_sums(mapbuf, st.st_size, f_out); - -@@ -543,7 +656,8 @@ static void recv_generator(char *fname, - } - - --void generate_files(int f, struct file_list *flist, char *local_name) -+void generate_files(int f, struct file_list *flist, char *local_name, -+ int f_nameout) - { - int i; - int phase = 0; -@@ -584,7 +698,7 @@ void generate_files(int f, struct file_l - } - - recv_generator(local_name ? local_name : f_name_to(file, fbuf), -- file, i, f); -+ file, i, f, f_nameout); - } - - phase++; -@@ -601,7 +715,7 @@ void generate_files(int f, struct file_l - while ((i = get_redo_num()) != -1) { - struct file_struct *file = flist->files[i]; - recv_generator(local_name ? local_name : f_name_to(file, fbuf), -- file, i, f); -+ file, i, f, f_nameout); - } - - phase++; -@@ -620,7 +734,7 @@ void generate_files(int f, struct file_l - if (!file->basename || !S_ISDIR(file->mode)) - continue; - recv_generator(local_name ? local_name : f_name(file), -- file, i, -1); -+ file, i, -1, -1); - } - - if (verbose > 2) ---- main.c 30 Jun 2004 07:27:30 -0000 1.202 -+++ main.c 30 Jun 2004 07:43:47 -0000 -@@ -429,7 +429,7 @@ static int do_recv(int f_in,int f_out,st - { - int pid; - int status = 0; -- int error_pipe[2]; -+ int error_pipe[2], name_pipe[2]; - - if (preserve_hard_links) - init_hard_links(flist); -@@ -441,8 +441,8 @@ static int do_recv(int f_in,int f_out,st - } - } - -- if (fd_pair(error_pipe) < 0) { -- rprintf(FERROR,"error pipe failed in do_recv\n"); -+ if (fd_pair(error_pipe) < 0 || fd_pair(name_pipe) < 0) { -+ rprintf(FERROR, "fd_pair() failed in do_recv\n"); - exit_cleanup(RERR_SOCKETIO); - } - -@@ -450,8 +450,10 @@ static int do_recv(int f_in,int f_out,st - - if ((pid = do_fork()) == 0) { - close(error_pipe[0]); -+ close(name_pipe[1]); - if (f_in != f_out) - close(f_out); -+ set_blocking(name_pipe[0]); - - /* we can't let two processes write to the socket at one time */ - io_multiplexing_close(); -@@ -459,7 +461,7 @@ static int do_recv(int f_in,int f_out,st - /* set place to send errors */ - set_msg_fd_out(error_pipe[1]); - -- recv_files(f_in,flist,local_name); -+ recv_files(f_in, flist, local_name, name_pipe[0]); - io_flush(FULL_FLUSH); - report(f_in); - -@@ -475,14 +477,16 @@ static int do_recv(int f_in,int f_out,st - am_generator = 1; - - close(error_pipe[1]); -+ close(name_pipe[0]); - if (f_in != f_out) - close(f_in); -+ set_blocking(name_pipe[1]); - - io_start_buffering_out(f_out); - - set_msg_fd_in(error_pipe[0]); - -- generate_files(f_out, flist, local_name); -+ generate_files(f_out, flist, local_name, name_pipe[1]); - - get_redo_num(); /* Read final MSG_DONE and any prior messages. */ - report(-1); ---- options.c 20 Jun 2004 19:47:05 -0000 1.157 -+++ options.c 30 Jun 2004 07:43:47 -0000 +--- orig/options.c 2004-06-20 19:30:00 ++++ options.c 2004-07-03 19:27:25 @@ -94,6 +94,7 @@ int ignore_errors = 0; int modify_window = 0; int blocking_io = -1; @@ -368,8 +180,8 @@ Very lightly tested. *argc = ac; return; ---- receiver.c 30 Jun 2004 07:27:30 -0000 1.84 -+++ receiver.c 30 Jun 2004 07:43:47 -0000 +--- orig/receiver.c 2004-07-03 20:08:07 ++++ receiver.c 2004-07-03 20:09:05 @@ -36,7 +36,6 @@ extern int preserve_perms; extern int cvs_exclude; extern int io_error; @@ -378,64 +190,8 @@ Very lightly tested. extern int make_backups; extern int do_progress; extern char *backup_dir; -@@ -293,14 +292,15 @@ static int receive_data(int f_in,struct - * main routine for receiver process. - * - * Receiver process runs on the same host as the generator process. */ --int recv_files(int f_in,struct file_list *flist,char *local_name) -+int recv_files(int f_in, struct file_list *flist, char *local_name, -+ int f_name) - { - int fd1,fd2; - STRUCT_STAT st; - char *fname, fbuf[MAXPATHLEN]; - char template[MAXPATHLEN]; - char fnametmp[MAXPATHLEN]; -- char *fnamecmp; -+ char *fnamecmp, *cp; - char fnamecmpbuf[MAXPATHLEN]; - struct map_struct *mapbuf; - struct file_struct *file; -@@ -364,19 +364,19 @@ int recv_files(int f_in,struct file_list - if (verbose > 2) - rprintf(FINFO,"recv_files(%s)\n",fname); - -- fnamecmp = fname; -+ for (cp = fnamecmpbuf; ; cp++) { -+ if (read(f_name, cp, 1) <= 0) { -+ rsyserr(FERROR, errno, "fname-pipe read failed"); -+ exit_cleanup(RERR_PROTOCOL); -+ } -+ if (!*cp) -+ break; -+ } -+ fnamecmp = *fnamecmpbuf ? fnamecmpbuf : fname; - - /* open the file */ - fd1 = do_open(fnamecmp, O_RDONLY, 0); - -- if (fd1 == -1 && compare_dest != NULL) { -- /* try the file at compare_dest instead */ -- pathjoin(fnamecmpbuf, sizeof fnamecmpbuf, -- compare_dest, fname); -- fnamecmp = fnamecmpbuf; -- fd1 = do_open(fnamecmp, O_RDONLY, 0); -- } -- - if (fd1 != -1 && do_fstat(fd1,&st) != 0) { - rsyserr(FERROR, errno, "fstat %s failed", - full_fname(fnamecmp)); -@@ -385,7 +385,7 @@ int recv_files(int f_in,struct file_list - continue; - } - -- if (fd1 != -1 && S_ISDIR(st.st_mode) && fnamecmp == fname) { -+ if (fd1 != -1 && S_ISDIR(st.st_mode) && !*fnamecmpbuf) { - /* this special handling for directories - * wouldn't be necessary if robust_rename() - * and the underlying robust_unlink could cope ---- rsync.yo 5 Jun 2004 16:16:30 -0000 1.171 -+++ rsync.yo 30 Jun 2004 07:43:48 -0000 +--- orig/rsync.yo 2004-06-17 06:32:00 ++++ rsync.yo 2004-07-03 19:27:25 @@ -325,6 +325,7 @@ verb( -T --temp-dir=DIR create temporary files in directory DIR --compare-dest=DIR also compare received files relative to DIR