From 93689aa51a1541cbc53bd9fa261b9c01ce0d0a95 Mon Sep 17 00:00:00 2001 From: David Dykstra Date: Tue, 5 Feb 2002 23:05:31 +0000 Subject: [PATCH] Add --no-whole-file and --no-blocking-io options --- NEWS | 2 ++ main.c | 8 +++++--- options.c | 22 ++++++++++++++++++---- rsync.yo | 8 ++++++++ 4 files changed, 33 insertions(+), 7 deletions(-) diff --git a/NEWS b/NEWS index b81dadd2..620db73a 100644 --- a/NEWS +++ b/NEWS @@ -7,3 +7,5 @@ rsync 2.5.3 (not released yet) what was historically used so as not to break scripts that try to parse the output. + * Added --no-whole-file and --no-blocking-io options + diff --git a/main.c b/main.c index 4052ea98..fa5ecc03 100644 --- a/main.c +++ b/main.c @@ -207,10 +207,11 @@ static pid_t do_cmd(char *cmd,char *machine,char *user,char *path,int *f_in,int args[argc++] = rsync_path; - server_options(args,&argc); + if ((blocking_io == -1) && (strcmp(cmd, RSYNC_RSH) == 0)) + blocking_io = 1; + server_options(args,&argc); - if (strcmp(cmd, RSYNC_RSH) == 0) blocking_io = 1; } args[argc++] = "."; @@ -711,7 +712,8 @@ static int start_client(int argc, char *argv[]) if (!p) { local_server = 1; /* disable "rsync algorithm" when both sides local */ - whole_file = 1; + if (whole_file == -1) + whole_file = 1; } else if (p[1] == ':') { *p = 0; return start_socket_client(argv[argc-1], p+2, argc-1, argv); diff --git a/options.c b/options.c index 612eafd2..98673cc1 100644 --- a/options.c +++ b/options.c @@ -22,7 +22,7 @@ #include "popt.h" int make_backups = 0; -int whole_file = 0; +int whole_file = -1; int copy_links = 0; int preserve_links = 0; int preserve_hard_links = 0; @@ -73,7 +73,7 @@ int modify_window=2; #else int modify_window=0; #endif -int blocking_io=0; +int blocking_io=-1; /** Network address family. **/ #ifdef INET6 @@ -203,6 +203,7 @@ void usage(enum logcode F) 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 whole files, no incremental checks\n"); + rprintf(F," --no-whole-file turn off --whole-file\n"); rprintf(F," -x, --one-file-system don't cross filesystem boundaries\n"); rprintf(F," -B, --block-size=SIZE checksum blocking size (default %d)\n",BLOCK_SIZE); rprintf(F," -e, --rsh=COMMAND specify rsh replacement\n"); @@ -237,6 +238,7 @@ void usage(enum logcode F) rprintf(F," --config=FILE specify alternate rsyncd.conf file\n"); rprintf(F," --port=PORT specify alternate rsyncd port number\n"); rprintf(F," --blocking-io use blocking IO for the remote shell\n"); + rprintf(F," --no-blocking-io turn off --blocking-io\n"); rprintf(F," --stats give some file transfer stats\n"); rprintf(F," --progress show progress during transfer\n"); rprintf(F," --log-format=FORMAT log file transfers using specified format\n"); @@ -264,6 +266,7 @@ enum {OPT_VERSION = 1000, OPT_SUFFIX, OPT_SENDER, OPT_SERVER, OPT_EXCLUDE, OPT_LOG_FORMAT, OPT_PASSWORD_FILE, OPT_SIZE_ONLY, OPT_ADDRESS, OPT_DELETE_AFTER, OPT_EXISTING, OPT_MAX_DELETE, OPT_BACKUP_DIR, OPT_IGNORE_ERRORS, OPT_BWLIMIT, OPT_BLOCKING_IO, + OPT_NO_BLOCKING_IO, OPT_NO_WHOLE_FILE, OPT_MODIFY_WINDOW, OPT_READ_BATCH, OPT_WRITE_BATCH, OPT_IGNORE_EXISTING}; static struct poptOption long_options[] = { @@ -297,6 +300,7 @@ static struct poptOption long_options[] = { {"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}, {"copy-unsafe-links", 0, POPT_ARG_NONE, ©_unsafe_links}, {"perms", 'p', POPT_ARG_NONE, &preserve_perms}, {"owner", 'o', POPT_ARG_NONE, &preserve_uid}, @@ -326,6 +330,7 @@ static struct poptOption long_options[] = { {"partial", 0, POPT_ARG_NONE, &keep_partial}, {"ignore-errors", 0, POPT_ARG_NONE, &ignore_errors}, {"blocking-io", 0, POPT_ARG_NONE, &blocking_io}, + {"no-blocking-io", 0, POPT_ARG_NONE, 0, OPT_NO_BLOCKING_IO}, {0, 'P', POPT_ARG_NONE, 0, 'P'}, {"config", 0, POPT_ARG_STRING, &config_file}, {"port", 0, POPT_ARG_INT, &rsync_port}, @@ -455,8 +460,12 @@ int parse_arguments(int *argc, const char ***argv, int frommain) add_exclude_file(poptGetOptArg(pc), 1, 0); break; - case OPT_INCLUDE_FROM: - add_exclude_file(poptGetOptArg(pc), 1, 1); + case OPT_NO_WHOLE_FILE: + whole_file = 0; + break; + + case OPT_NO_BLOCKING_IO: + blocking_io = 0; break; case 'h': @@ -557,6 +566,11 @@ void server_options(char **args,int *argc) int i, x; + if (whole_file == -1) + whole_file = 0; + if (blocking_io == -1) + blocking_io = 0; + args[ac++] = "--server"; if (!am_sender) diff --git a/rsync.yo b/rsync.yo index 95f33f17..035a352c 100644 --- a/rsync.yo +++ b/rsync.yo @@ -239,6 +239,7 @@ verb( -S, --sparse handle sparse files efficiently -n, --dry-run show what would have been transferred -W, --whole-file copy whole files, no incremental checks + --no-whole-file turn off --whole-file -x, --one-file-system don't cross filesystem boundaries -B, --block-size=SIZE checksum blocking size (default 700) -e, --rsh=COMMAND specify rsh replacement @@ -273,6 +274,7 @@ verb( --config=FILE specify alternate rsyncd.conf file --port=PORT specify alternate rsyncd port number --blocking-io use blocking IO for the remote shell + --no-blocking-io turn off --blocking-io --stats give some file transfer stats --progress show progress during transfer --log-format=FORMAT log file transfers using specified format @@ -411,6 +413,9 @@ target machines is higher than the bandwidth to disk (especially when the "disk" is actually a networked file system). This is the default when both the source and target are on the local machine. +dit(bf(--no-whole-file)) Turn off --whole-file, for use when it is the +default. + dit(bf(-p, --perms)) This option causes rsync to update the remote permissions to be the same as the local permissions. @@ -657,6 +662,9 @@ the default "rsh", this defaults to blocking IO, otherwise it defaults to non-blocking IO. You may find the --blocking-io option is needed for some remote shells that can't handle non-blocking IO. Ssh prefers blocking IO. +dit(bf(--no-blocking-io)) Turn off --blocking-io, for use when it is the +default. + dit(bf(--log-format=FORMAT)) This allows you to specify exactly what the rsync client logs to stdout on a per-file basis. The log format is specified using the same format conventions as the log format option in -- 2.34.1