#include "popt.h"
int make_backups = 0;
-int whole_file = -1;
+
+/**
+ * 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.
+ *
+ * If both are 0, then look at whether we're local or remote and go by
+ * that.
+ **/
+int whole_file = 0;
+int no_whole_file = 0;
+
int copy_links = 0;
int preserve_links = 0;
int preserve_hard_links = 0;
{"links", 'l', POPT_ARG_NONE, &preserve_links},
{"copy-links", 'L', POPT_ARG_NONE, ©_links},
{"whole-file", 'W', POPT_ARG_NONE, &whole_file},
- {"no-whole-file", 0, POPT_ARG_NONE, 0, OPT_NO_WHOLE_FILE},
+ {"no-whole-file", 0, POPT_ARG_NONE, &no_whole_file},
{"copy-unsafe-links", 0, POPT_ARG_NONE, ©_unsafe_links},
{"perms", 'p', POPT_ARG_NONE, &preserve_perms},
{"owner", 'o', POPT_ARG_NONE, &preserve_uid},
add_exclude_file(poptGetOptArg(pc), 1, 1);
break;
- case OPT_NO_WHOLE_FILE:
- whole_file = 0;
- break;
-
case OPT_NO_BLOCKING_IO:
blocking_io = 0;
break;
int i, x;
- if (whole_file == -1)
- whole_file = 0;
if (blocking_io == -1)
blocking_io = 0;
argstr[x++] = 'l';
if (copy_links)
argstr[x++] = 'L';
+
+ assert(whole_file == 0 || whole_file == 1);
if (whole_file)
argstr[x++] = 'W';
+ /* We don't need to send --no-whole-file, because it's the
+ * default for remote transfers, and in any case old versions
+ * of rsync will not understand it. */
+
if (preserve_hard_links)
argstr[x++] = 'H';
if (preserve_uid)
args[ac++] = compare_dest;
}
-
*argc = ac;
}