X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/9c71f56a251e0b4edfcb6b3aa1e3bda5f0bdd37b..37802f40dcbe8956ba8ee3bfbddf10c60f94c209:/options.c diff --git a/options.c b/options.c index db1317ac..cc6f9131 100644 --- a/options.c +++ b/options.c @@ -89,6 +89,7 @@ int copy_unsafe_links = 0; 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; @@ -104,7 +105,7 @@ long block_size = 0; /* "long" because popt can't set an int32. */ /** Network address family. **/ -#if INET6 +#ifdef INET6 int default_af_hint = 0; /* Any protocol */ #else int default_af_hint = AF_INET; /* Must use IPv4 */ @@ -170,23 +171,23 @@ static void print_rsync_version(enum logcode f) 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 @@ -302,6 +303,7 @@ void usage(enum logcode F) 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"); @@ -329,7 +331,7 @@ void usage(enum logcode F) 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 @@ -411,6 +413,7 @@ static struct poptOption long_options[] = { {"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 }, @@ -435,7 +438,7 @@ static struct poptOption long_options[] = { {"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 @@ -458,7 +461,7 @@ static void daemon_usage(enum logcode F) 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 @@ -474,7 +477,7 @@ static struct poptOption long_daemon_options[] = { {"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 @@ -799,7 +802,7 @@ int parse_arguments(int *argc, const char ***argv, int frommain) break; case OPT_LINK_DEST: -#if HAVE_LINK +#ifdef HAVE_LINK link_dest = 1; dest_option = "--link-dest"; goto set_dest_dir; @@ -849,7 +852,7 @@ int parse_arguments(int *argc, const char ***argv, int frommain) 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", @@ -858,7 +861,7 @@ int parse_arguments(int *argc, const char ***argv, int frommain) } #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", @@ -921,7 +924,7 @@ int parse_arguments(int *argc, const char ***argv, int frommain) } if (!files_from) recurse = -1; /* infinite recursion */ -#if SUPPORT_LINKS +#ifdef SUPPORT_LINKS preserve_links = 1; #endif preserve_perms = 1; @@ -1064,7 +1067,7 @@ int parse_arguments(int *argc, const char ***argv, int frommain) 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", @@ -1382,6 +1385,9 @@ void server_options(char **args,int *argc) if (!implied_dirs && !am_sender) args[ac++] = "--no-implied-dirs"; + if (fuzzy_basis && am_sender) + args[ac++] = "--fuzzy"; + *argc = ac; return;