int size_only = 0;
int daemon_bwlimit = 0;
int bwlimit = 0;
+int fuzzy_basis = 0;
size_t bwlimit_writemax = 0;
int only_existing = 0;
int opt_ignore_existing = 0;
/** Network address family. **/
-#if INET6
+#ifdef INET6
int default_af_hint = 0; /* Any protocol */
#else
int default_af_hint = AF_INET; /* Must use IPv4 */
char const *ipv6 = "no ";
STRUCT_STAT *dumstat;
-#if HAVE_SOCKETPAIR
+#ifdef HAVE_SOCKETPAIR
got_socketpair = "";
#endif
-#if HAVE_FTRUNCATE
+#ifdef HAVE_FTRUNCATE
have_inplace = "";
#endif
-#if SUPPORT_HARD_LINKS
+#ifdef SUPPORT_HARD_LINKS
hardlinks = "";
#endif
-#if SUPPORT_LINKS
+#ifdef SUPPORT_LINKS
links = "";
#endif
-#if INET6
+#ifdef INET6
ipv6 = "";
#endif
rprintf(F," --size-only skip files that match in size\n");
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");
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");
rprintf(F," -z, --compress compress file data during the transfer\n");
rprintf(F," -C, --cvs-exclude auto-ignore files the same way CVS does\n");
rprintf(F," -f, --filter=RULE add a file-filtering RULE\n");
- rprintf(F," -F same as --filter=': /.rsync-filter'\n");
+ rprintf(F," -F same as --filter='dir-merge /.rsync-filter'\n");
rprintf(F," repeated: --filter='- .rsync-filter'\n");
rprintf(F," --exclude=PATTERN exclude files matching PATTERN\n");
rprintf(F," --exclude-from=FILE read exclude patterns from FILE\n");
rprintf(F," --bwlimit=KBPS limit I/O bandwidth; KBytes per second\n");
rprintf(F," --write-batch=FILE write a batched update to FILE\n");
rprintf(F," --read-batch=FILE read a batched update from FILE\n");
-#if INET6
+#ifdef INET6
rprintf(F," -4, --ipv4 prefer IPv4\n");
rprintf(F," -6, --ipv6 prefer IPv6\n");
#endif
{"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 },
+ {"fuzzy", 'y', POPT_ARG_NONE, &fuzzy_basis, 0, 0, 0 },
/* TODO: Should this take an optional int giving the compression level? */
{"compress", 'z', POPT_ARG_NONE, &do_compression, 0, 0, 0 },
{"stats", 0, POPT_ARG_NONE, &do_stats, 0, 0, 0 },
{"no-implied-dirs", 0, POPT_ARG_VAL, &implied_dirs, 0, 0, 0 },
{"protocol", 0, POPT_ARG_INT, &protocol_version, 0, 0, 0 },
{"checksum-seed", 0, POPT_ARG_INT, &checksum_seed, 0, 0, 0 },
-#if INET6
+#ifdef INET6
{"ipv4", '4', POPT_ARG_VAL, &default_af_hint, AF_INET, 0, 0 },
{"ipv6", '6', POPT_ARG_VAL, &default_af_hint, AF_INET6, 0, 0 },
#endif
rprintf(F," --no-detach do not detach from the parent\n");
rprintf(F," --port=PORT listen on alternate port number\n");
rprintf(F," -v, --verbose increase verbosity\n");
-#if INET6
+#ifdef INET6
rprintf(F," -4, --ipv4 prefer IPv4\n");
rprintf(F," -6, --ipv6 prefer IPv6\n");
#endif
{"bwlimit", 0, POPT_ARG_INT, &daemon_bwlimit, 0, 0, 0 },
{"config", 0, POPT_ARG_STRING, &config_file, 0, 0, 0 },
{"daemon", 0, POPT_ARG_NONE, &daemon_opt, 0, 0, 0 },
-#if INET6
+#ifdef INET6
{"ipv4", '4', POPT_ARG_VAL, &default_af_hint, AF_INET, 0, 0 },
{"ipv6", '6', POPT_ARG_VAL, &default_af_hint, AF_INET6, 0, 0 },
#endif
break;
case OPT_LINK_DEST:
-#if HAVE_LINK
+#ifdef HAVE_LINK
link_dest = 1;
dest_option = "--link-dest";
goto set_dest_dir;
if (am_sender < 0)
am_sender = 0;
-#if !SUPPORT_LINKS
+#ifndef SUPPORT_LINKS
if (preserve_links && !am_sender) {
snprintf(err_buf, sizeof err_buf,
"symlinks are not supported on this %s\n",
}
#endif
-#if !SUPPORT_HARD_LINKS
+#ifndef SUPPORT_HARD_LINKS
if (preserve_hard_links) {
snprintf(err_buf, sizeof err_buf,
"hard links are not supported on this %s\n",
}
if (!files_from)
recurse = -1; /* infinite recursion */
-#if SUPPORT_LINKS
+#ifdef SUPPORT_LINKS
preserve_links = 1;
#endif
preserve_perms = 1;
partial_dir = partialdir_for_delayupdate;
if (inplace) {
-#if HAVE_FTRUNCATE
+#ifdef HAVE_FTRUNCATE
if (partial_dir) {
snprintf(err_buf, sizeof err_buf,
"--inplace cannot be used with --%s\n",
if (!implied_dirs && !am_sender)
args[ac++] = "--no-implied-dirs";
+ if (fuzzy_basis && am_sender)
+ args[ac++] = "--fuzzy";
+
*argc = ac;
return;