X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/4f5b0756df0dfc925b9576db47ecce949c378e18..e2124620eb4ff83fe5f830431e15289a9896438c:/options.c diff --git a/options.c b/options.c index 841f4725..835ed7e7 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; @@ -140,6 +141,7 @@ int basis_dir_cnt = 0; int verbose = 0; int quiet = 0; +int itemize_changes = 0; int always_checksum = 0; int list_only = 0; @@ -275,7 +277,7 @@ void usage(enum logcode F) rprintf(F," -O, --omit-dir-times omit directories when preserving times\n"); rprintf(F," -S, --sparse handle sparse files efficiently\n"); rprintf(F," -n, --dry-run show what would have been transferred\n"); - rprintf(F," -W, --whole-file copy files whole\n"); + rprintf(F," -W, --whole-file copy files whole (without rsync algorithm)\n"); rprintf(F," --no-whole-file always use incremental rsync algorithm\n"); rprintf(F," -x, --one-file-system don't cross filesystem boundaries\n"); rprintf(F," -B, --block-size=SIZE force a fixed checksum block-size\n"); @@ -302,6 +304,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"); @@ -323,6 +326,7 @@ void usage(enum logcode F) rprintf(F," --stats give some file-transfer stats\n"); rprintf(F," --progress show progress during transfer\n"); rprintf(F," -P same as --partial --progress\n"); + rprintf(F," -i, --itemize-changes output a change-summary for all updates\n"); rprintf(F," --log-format=FORMAT log file-transfers using specified format\n"); rprintf(F," --password-file=FILE read password from FILE\n"); rprintf(F," --list-only list the files instead of copying them\n"); @@ -385,7 +389,7 @@ static struct poptOption long_options[] = { {"keep-dirlinks", 'K', POPT_ARG_NONE, &keep_dirlinks, 0, 0, 0 }, {"whole-file", 'W', POPT_ARG_VAL, &whole_file, 1, 0, 0 }, {"no-whole-file", 0, POPT_ARG_VAL, &whole_file, 0, 0, 0 }, - {"copy-unsafe-links", 0, POPT_ARG_NONE, ©_unsafe_links, 0, 0, 0 }, + {"copy-unsafe-links",0, POPT_ARG_NONE, ©_unsafe_links, 0, 0, 0 }, {"perms", 'p', POPT_ARG_NONE, &preserve_perms, 0, 0, 0 }, {"owner", 'o', POPT_ARG_NONE, &preserve_uid, 0, 0, 0 }, {"group", 'g', POPT_ARG_NONE, &preserve_gid, 0, 0, 0 }, @@ -411,6 +415,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 }, @@ -425,6 +430,7 @@ static struct poptOption long_options[] = { {0, 'P', POPT_ARG_NONE, 0, 'P', 0, 0 }, {"port", 0, POPT_ARG_INT, &rsync_port, 0, 0, 0 }, {"log-format", 0, POPT_ARG_STRING, &log_format, 0, 0, 0 }, + {"itemize-changes", 'i', POPT_ARG_NONE, &itemize_changes, 0, 0, 0 }, {"bwlimit", 0, POPT_ARG_INT, &bwlimit, 0, 0, 0 }, {"backup-dir", 0, POPT_ARG_STRING, &backup_dir, 0, 0, 0 }, {"hard-links", 'H', POPT_ARG_NONE, &preserve_hard_links, 0, 0, 0 }, @@ -1044,7 +1050,7 @@ int parse_arguments(int *argc, const char ***argv, int frommain) return 0; } - if (do_progress && !verbose) { + if (do_progress && !verbose && !itemize_changes) { if (refused_verbose) { create_refuse_error(refused_verbose); return 0; @@ -1201,6 +1207,8 @@ void server_options(char **args,int *argc) * default for remote transfers, and in any case old versions * of rsync will not understand it. */ + if (itemize_changes && am_sender) + argstr[x++] = 'i'; if (preserve_hard_links) argstr[x++] = 'H'; if (preserve_uid) @@ -1382,6 +1390,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;