X-Git-Url: https://mattmccutchen.net/rsync/rsync-patches.git/blobdiff_plain/9a7eef964a2e3389ffd3537302f80ca42cfe9239..a94141d9fb91e0f615d8c888217e451904c7898e:/source-filter_dest-filter.diff diff --git a/source-filter_dest-filter.diff b/source-filter_dest-filter.diff index 836ab1d..394905e 100644 --- a/source-filter_dest-filter.diff +++ b/source-filter_dest-filter.diff @@ -48,9 +48,20 @@ After applying this patch, run these commands for a successful build: return 0; /* if always checksum is set then we use the checksum instead +--- old/main.c ++++ new/main.c +@@ -110,7 +110,7 @@ pid_t wait_process(pid_t pid, int *statu + } + + /* Wait for a process to exit, calling io_flush while waiting. */ +-static void wait_process_with_flush(pid_t pid, int *exit_code_ptr) ++void wait_process_with_flush(pid_t pid, int *exit_code_ptr) + { + pid_t waited_pid; + int status; --- old/options.c +++ new/options.c -@@ -98,6 +98,7 @@ int keep_partial = 0; +@@ -99,6 +99,7 @@ int keep_partial = 0; int safe_symlinks = 0; int copy_unsafe_links = 0; int size_only = 0; @@ -58,7 +69,7 @@ After applying this patch, run these commands for a successful build: int daemon_bwlimit = 0; int bwlimit = 0; int fuzzy_basis = 0; -@@ -147,6 +148,8 @@ char *basis_dir[MAX_BASIS_DIRS+1]; +@@ -148,6 +149,8 @@ char *basis_dir[MAX_BASIS_DIRS+1]; char *config_file = NULL; char *shell_cmd = NULL; char *log_format = NULL; @@ -67,7 +78,7 @@ After applying this patch, run these commands for a successful build: char *password_file = NULL; char *rsync_path = RSYNC_PATH; char *backup_dir = NULL; -@@ -331,6 +334,7 @@ void usage(enum logcode F) +@@ -332,6 +335,7 @@ void usage(enum logcode F) rprintf(F," --timeout=TIME set I/O timeout in seconds\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"); @@ -75,7 +86,7 @@ After applying this patch, run these commands for a successful build: 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"); -@@ -366,6 +370,8 @@ void usage(enum logcode F) +@@ -367,6 +371,8 @@ void usage(enum logcode F) rprintf(F," --write-batch=FILE write a batched update to FILE\n"); rprintf(F," --only-write-batch=FILE like --write-batch but w/o updating destination\n"); rprintf(F," --read-batch=FILE read a batched update from FILE\n"); @@ -92,7 +103,7 @@ After applying this patch, run these commands for a successful build: {"one-file-system", 'x', POPT_ARG_NONE, 0, 'x', 0, 0 }, {"update", 'u', POPT_ARG_NONE, &update_only, 0, 0, 0 }, {"existing", 0, POPT_ARG_NONE, &ignore_non_existing, 0, 0, 0 }, -@@ -516,6 +523,8 @@ static struct poptOption long_options[] +@@ -517,6 +524,8 @@ static struct poptOption long_options[] {"password-file", 0, POPT_ARG_STRING, &password_file, 0, 0, 0 }, {"blocking-io", 0, POPT_ARG_VAL, &blocking_io, 1, 0, 0 }, {"no-blocking-io", 0, POPT_ARG_VAL, &blocking_io, 0, 0, 0 }, @@ -101,7 +112,7 @@ After applying this patch, run these commands for a successful build: {"protocol", 0, POPT_ARG_INT, &protocol_version, 0, 0, 0 }, {"checksum-seed", 0, POPT_ARG_INT, &checksum_seed, 0, 0, 0 }, {"server", 0, POPT_ARG_NONE, 0, OPT_SERVER, 0, 0 }, -@@ -1380,6 +1389,16 @@ int parse_arguments(int *argc, const cha +@@ -1385,6 +1394,16 @@ int parse_arguments(int *argc, const cha } } @@ -118,8 +129,8 @@ After applying this patch, run these commands for a successful build: if (files_from) { char *h, *p; int q; -@@ -1640,6 +1659,25 @@ void server_options(char **args,int *arg - args[ac++] = "--super"; +@@ -1647,6 +1666,25 @@ void server_options(char **args,int *arg + args[ac++] = "--size-only"; } + if (times_only && am_sender) @@ -141,9 +152,9 @@ After applying this patch, run these commands for a successful build: + args[ac++] = arg; + } + - if (size_only) - args[ac++] = "--size-only"; - + if (modify_window_set) { + if (asprintf(&arg, "--modify-window=%d", modify_window) < 0) + goto oom; --- old/pipe.c +++ new/pipe.c @@ -157,3 +157,77 @@ pid_t local_child(int argc, char **argv, @@ -234,7 +245,7 @@ After applying this patch, run these commands for a successful build: extern char *tmpdir; extern char *partial_dir; extern char *basis_dir[]; -@@ -411,6 +412,8 @@ int recv_files(int f_in, struct file_lis +@@ -350,6 +351,8 @@ int recv_files(int f_in, struct file_lis : !am_server && log_format_has_i; int max_phase = protocol_version >= 29 ? 2 : 1; int i, recv_ok; @@ -243,9 +254,9 @@ After applying this patch, run these commands for a successful build: if (verbose > 2) rprintf(FINFO,"recv_files(%d) starting\n",flist->count); -@@ -423,6 +426,23 @@ int recv_files(int f_in, struct file_lis +@@ -362,6 +365,23 @@ int recv_files(int f_in, struct file_lis if (delay_updates) - init_delayed_bits(flist->count); + delayed_bits = bitbag_create(flist->count); + if (dest_filter) { + char *p; @@ -267,7 +278,7 @@ After applying this patch, run these commands for a successful build: while (1) { cleanup_disable(); -@@ -665,6 +685,9 @@ int recv_files(int f_in, struct file_lis +@@ -604,6 +624,9 @@ int recv_files(int f_in, struct file_lis else if (!am_server && verbose && do_progress) rprintf(FINFO, "%s\n", fname); @@ -277,13 +288,13 @@ After applying this patch, run these commands for a successful build: /* recv file data */ recv_ok = receive_data(f_in, fnamecmp, fd1, st.st_size, fname, fd2, file->length); -@@ -680,6 +703,16 @@ int recv_files(int f_in, struct file_lis +@@ -619,6 +642,16 @@ int recv_files(int f_in, struct file_lis exit_cleanup(RERR_FILEIO); } + if (dest_filter) { + int status; -+ wait_process(pid, &status); ++ wait_process_with_flush(pid, &status); + if (status != 0) { + rprintf(FERROR, "filter %s exited code: %d\n", + dest_filter, status); @@ -323,7 +334,7 @@ After applying this patch, run these commands for a successful build: --protocol=NUM force an older protocol version to be used --checksum-seed=NUM set block/file checksum seed (advanced) -4, --ipv4 prefer IPv4 -@@ -1598,6 +1601,33 @@ file previously generated by bf(--write- +@@ -1609,6 +1612,33 @@ file previously generated by bf(--write- If em(FILE) is bf(-), the batch data will be read from standard input. See the "BATCH MODE" section for details. @@ -420,7 +431,7 @@ After applying this patch, run these commands for a successful build: + pid_t pid = run_filter_on_file(filter_argv, fd2, fd); + close(fd); + close(fd2); -+ wait_process(pid, &status); ++ wait_process_with_flush(pid, &status); + if (status != 0) { + rprintf(FERROR, + "bypassing source filter %s; exited with code: %d\n",