Commit 93689aa5 authored by David Dykstra's avatar David Dykstra

Add --no-whole-file and --no-blocking-io options

parent 46e6ad49
...@@ -7,3 +7,5 @@ rsync 2.5.3 (not released yet) ...@@ -7,3 +7,5 @@ rsync 2.5.3 (not released yet)
what was historically used so as not to break scripts that try what was historically used so as not to break scripts that try
to parse the output. to parse the output.
* Added --no-whole-file and --no-blocking-io options
...@@ -207,10 +207,11 @@ static pid_t do_cmd(char *cmd,char *machine,char *user,char *path,int *f_in,int ...@@ -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; 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++] = "."; args[argc++] = ".";
...@@ -711,7 +712,8 @@ static int start_client(int argc, char *argv[]) ...@@ -711,7 +712,8 @@ static int start_client(int argc, char *argv[])
if (!p) { if (!p) {
local_server = 1; local_server = 1;
/* disable "rsync algorithm" when both sides local */ /* disable "rsync algorithm" when both sides local */
whole_file = 1; if (whole_file == -1)
whole_file = 1;
} else if (p[1] == ':') { } else if (p[1] == ':') {
*p = 0; *p = 0;
return start_socket_client(argv[argc-1], p+2, argc-1, argv); return start_socket_client(argv[argc-1], p+2, argc-1, argv);
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
#include "popt.h" #include "popt.h"
int make_backups = 0; int make_backups = 0;
int whole_file = 0; int whole_file = -1;
int copy_links = 0; int copy_links = 0;
int preserve_links = 0; int preserve_links = 0;
int preserve_hard_links = 0; int preserve_hard_links = 0;
...@@ -73,7 +73,7 @@ int modify_window=2; ...@@ -73,7 +73,7 @@ int modify_window=2;
#else #else
int modify_window=0; int modify_window=0;
#endif #endif
int blocking_io=0; int blocking_io=-1;
/** Network address family. **/ /** Network address family. **/
#ifdef INET6 #ifdef INET6
...@@ -203,6 +203,7 @@ void usage(enum logcode F) ...@@ -203,6 +203,7 @@ void usage(enum logcode F)
rprintf(F," -S, --sparse handle sparse files efficiently\n"); rprintf(F," -S, --sparse handle sparse files efficiently\n");
rprintf(F," -n, --dry-run show what would have been transferred\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," -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," -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," -B, --block-size=SIZE checksum blocking size (default %d)\n",BLOCK_SIZE);
rprintf(F," -e, --rsh=COMMAND specify rsh replacement\n"); rprintf(F," -e, --rsh=COMMAND specify rsh replacement\n");
...@@ -237,6 +238,7 @@ void usage(enum logcode F) ...@@ -237,6 +238,7 @@ void usage(enum logcode F)
rprintf(F," --config=FILE specify alternate rsyncd.conf file\n"); rprintf(F," --config=FILE specify alternate rsyncd.conf file\n");
rprintf(F," --port=PORT specify alternate rsyncd port number\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," --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," --stats give some file transfer stats\n");
rprintf(F," --progress show progress during transfer\n"); rprintf(F," --progress show progress during transfer\n");
rprintf(F," --log-format=FORMAT log file transfers using specified format\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, ...@@ -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_LOG_FORMAT, OPT_PASSWORD_FILE, OPT_SIZE_ONLY, OPT_ADDRESS,
OPT_DELETE_AFTER, OPT_EXISTING, OPT_MAX_DELETE, OPT_BACKUP_DIR, OPT_DELETE_AFTER, OPT_EXISTING, OPT_MAX_DELETE, OPT_BACKUP_DIR,
OPT_IGNORE_ERRORS, OPT_BWLIMIT, OPT_BLOCKING_IO, 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}; OPT_MODIFY_WINDOW, OPT_READ_BATCH, OPT_WRITE_BATCH, OPT_IGNORE_EXISTING};
static struct poptOption long_options[] = { static struct poptOption long_options[] = {
...@@ -297,6 +300,7 @@ static struct poptOption long_options[] = { ...@@ -297,6 +300,7 @@ static struct poptOption long_options[] = {
{"links", 'l', POPT_ARG_NONE, &preserve_links}, {"links", 'l', POPT_ARG_NONE, &preserve_links},
{"copy-links", 'L', POPT_ARG_NONE, &copy_links}, {"copy-links", 'L', POPT_ARG_NONE, &copy_links},
{"whole-file", 'W', POPT_ARG_NONE, &whole_file}, {"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, &copy_unsafe_links}, {"copy-unsafe-links", 0, POPT_ARG_NONE, &copy_unsafe_links},
{"perms", 'p', POPT_ARG_NONE, &preserve_perms}, {"perms", 'p', POPT_ARG_NONE, &preserve_perms},
{"owner", 'o', POPT_ARG_NONE, &preserve_uid}, {"owner", 'o', POPT_ARG_NONE, &preserve_uid},
...@@ -326,6 +330,7 @@ static struct poptOption long_options[] = { ...@@ -326,6 +330,7 @@ static struct poptOption long_options[] = {
{"partial", 0, POPT_ARG_NONE, &keep_partial}, {"partial", 0, POPT_ARG_NONE, &keep_partial},
{"ignore-errors", 0, POPT_ARG_NONE, &ignore_errors}, {"ignore-errors", 0, POPT_ARG_NONE, &ignore_errors},
{"blocking-io", 0, POPT_ARG_NONE, &blocking_io}, {"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'}, {0, 'P', POPT_ARG_NONE, 0, 'P'},
{"config", 0, POPT_ARG_STRING, &config_file}, {"config", 0, POPT_ARG_STRING, &config_file},
{"port", 0, POPT_ARG_INT, &rsync_port}, {"port", 0, POPT_ARG_INT, &rsync_port},
...@@ -455,8 +460,12 @@ int parse_arguments(int *argc, const char ***argv, int frommain) ...@@ -455,8 +460,12 @@ int parse_arguments(int *argc, const char ***argv, int frommain)
add_exclude_file(poptGetOptArg(pc), 1, 0); add_exclude_file(poptGetOptArg(pc), 1, 0);
break; break;
case OPT_INCLUDE_FROM: case OPT_NO_WHOLE_FILE:
add_exclude_file(poptGetOptArg(pc), 1, 1); whole_file = 0;
break;
case OPT_NO_BLOCKING_IO:
blocking_io = 0;
break; break;
case 'h': case 'h':
...@@ -557,6 +566,11 @@ void server_options(char **args,int *argc) ...@@ -557,6 +566,11 @@ void server_options(char **args,int *argc)
int i, x; int i, x;
if (whole_file == -1)
whole_file = 0;
if (blocking_io == -1)
blocking_io = 0;
args[ac++] = "--server"; args[ac++] = "--server";
if (!am_sender) if (!am_sender)
......
...@@ -239,6 +239,7 @@ verb( ...@@ -239,6 +239,7 @@ verb(
-S, --sparse handle sparse files efficiently -S, --sparse handle sparse files efficiently
-n, --dry-run show what would have been transferred -n, --dry-run show what would have been transferred
-W, --whole-file copy whole files, no incremental checks -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 -x, --one-file-system don't cross filesystem boundaries
-B, --block-size=SIZE checksum blocking size (default 700) -B, --block-size=SIZE checksum blocking size (default 700)
-e, --rsh=COMMAND specify rsh replacement -e, --rsh=COMMAND specify rsh replacement
...@@ -273,6 +274,7 @@ verb( ...@@ -273,6 +274,7 @@ verb(
--config=FILE specify alternate rsyncd.conf file --config=FILE specify alternate rsyncd.conf file
--port=PORT specify alternate rsyncd port number --port=PORT specify alternate rsyncd port number
--blocking-io use blocking IO for the remote shell --blocking-io use blocking IO for the remote shell
--no-blocking-io turn off --blocking-io
--stats give some file transfer stats --stats give some file transfer stats
--progress show progress during transfer --progress show progress during transfer
--log-format=FORMAT log file transfers using specified format --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 ...@@ -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 "disk" is actually a networked file system). This is the default when both
the source and target are on the local machine. 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 dit(bf(-p, --perms)) This option causes rsync to update the remote
permissions to be the same as the local permissions. 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 ...@@ -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 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. 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 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 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 specified using the same format conventions as the log format option in
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment