From: Martin Pool Date: Tue, 19 Mar 2002 03:21:53 +0000 (+0000) Subject: Fix --whole-file problem that caused it to be the default even for X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/commitdiff_plain/1bfbf40bd57f086f69971165feef54c13c6fadfd Fix --whole-file problem that caused it to be the default even for remote connections. (Frank Schulz) Also, add documentation for whole_file and add assertions that the value is valid. --- diff --git a/NEWS b/NEWS index e898557a..3a22226c 100644 --- a/NEWS +++ b/NEWS @@ -14,3 +14,6 @@ rsync changes since last release * Fix minor memory leak in socket code. (Dave Dykstra, Martin Pool.) + + * Fix --whole-file problem that caused it to be the default even + for remote connections. (Frank Schulz) diff --git a/generator.c b/generator.c index 80f6f135..950e3150 100644 --- a/generator.c +++ b/generator.c @@ -403,6 +403,8 @@ void recv_generator(char *fname,struct file_list *flist,int i,int f_out) return; } + assert(whole_file == 0 || whole_file == 1); + /* We should have decided by now.* / if (whole_file) { write_int(f_out,i); send_sums(NULL,f_out); diff --git a/options.c b/options.c index 38bc63ac..0f216343 100644 --- a/options.c +++ b/options.c @@ -22,7 +22,18 @@ #include "popt.h" int make_backups = 0; + +/** + * Should we send the whole file as literal data rather than trying to + * create an incremental diff? This is on by default when both source + * and destination are local and we're not doing a batch delta, + * because there it's no cheaper to read the whole basis file than to + * just rewrite it. + * + * -1 means "unspecified", i.e. depend on is_local; 0 means off; 1 means on. + **/ int whole_file = -1; + int copy_links = 0; int preserve_links = 0; int preserve_hard_links = 0; @@ -616,8 +627,13 @@ void server_options(char **args,int *argc) argstr[x++] = 'l'; if (copy_links) argstr[x++] = 'L'; + + assert(whole_file == 0 || whole_file == -1); if (whole_file) argstr[x++] = 'W'; + else + args[ac++] = "--no-whole-file"; + if (preserve_hard_links) argstr[x++] = 'H'; if (preserve_uid) @@ -758,7 +774,6 @@ void server_options(char **args,int *argc) args[ac++] = compare_dest; } - *argc = ac; } diff --git a/rsync.h b/rsync.h index 449ce094..6eacbcf5 100644 --- a/rsync.h +++ b/rsync.h @@ -217,6 +217,8 @@ enum logcode {FNONE=0, FERROR=1, FINFO=2, FLOG=3 }; #include #endif +#include + #define BOOL int