int verbose = 0;
int quiet = 0;
-int itemize_changes = 0;
int log_before_transfer = 0;
int log_format_has_i = 0;
int log_format_has_o_or_i = 0;
static int daemon_opt; /* sets am_daemon after option error-reporting */
static int F_option_cnt = 0;
static int modify_window_set;
+static int itemize_changes = 0;
static int refused_delete, refused_archive_part;
static int refused_partial, refused_progress, refused_delete_before;
static char *max_size_arg;
rprintf(F," --files-from=FILE read list of source-file names from FILE\n");
rprintf(F," -0, --from0 all *-from file lists are delimited by nulls\n");
rprintf(F," --version print version number\n");
+ rprintf(F," --address=ADDRESS bind address for outgoing socket to daemon\n");
rprintf(F," --port=PORT specify double-colon alternate port number\n");
rprintf(F," --blocking-io use blocking I/O for the remote shell\n");
rprintf(F," --no-blocking-io turn off blocking I/O when it is the default\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");
+ rprintf(F," --protocol=NUM force an older protocol version to be used\n");
#ifdef INET6
rprintf(F," -4, --ipv4 prefer IPv4\n");
rprintf(F," -6, --ipv6 prefer IPv6\n");
{"archive", 'a', POPT_ARG_NONE, &archive_mode, 0, 0, 0 },
{"server", 0, POPT_ARG_NONE, &am_server, 0, 0, 0 },
{"sender", 0, POPT_ARG_NONE, 0, OPT_SENDER, 0, 0 },
- {"recursive", 'r', POPT_ARG_VAL, &recurse, -1, 0, 0 },
+ {"recursive", 'r', POPT_ARG_NONE, &recurse, 0, 0, 0 },
{"list-only", 0, POPT_ARG_VAL, &list_only, 2, 0, 0 },
{"relative", 'R', POPT_ARG_VAL, &relative_paths, 1, 0, 0 },
{"no-relative", 0, POPT_ARG_VAL, &relative_paths, 0, 0, 0 },
{"no-blocking-io", 0, POPT_ARG_VAL, &blocking_io, 0, 0, 0 },
{0, 'F', POPT_ARG_NONE, 0, 'F', 0, 0 },
{0, 'P', POPT_ARG_NONE, 0, 'P', 0, 0 },
+ {"address", 0, POPT_ARG_STRING, &bind_address, 0, 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 },
{"ipv6", '6', POPT_ARG_VAL, &default_af_hint, AF_INET6, 0, 0 },
#endif
/* All these options switch us into daemon-mode option-parsing. */
- {"address", 0, POPT_ARG_STRING, 0, OPT_DAEMON, 0, 0 },
{"config", 0, POPT_ARG_STRING, 0, OPT_DAEMON, 0, 0 },
{"daemon", 0, POPT_ARG_NONE, 0, OPT_DAEMON, 0, 0 },
{"detach", 0, POPT_ARG_NONE, 0, OPT_DAEMON, 0, 0 },
return 0;
}
if (write_batch || read_batch) {
- if (dry_run) {
- snprintf(err_buf, sizeof err_buf,
- "--%s-batch cannot be used with --dry_run (-n)\n",
- write_batch ? "write" : "read");
- return 0;
- }
if (am_server) {
rprintf(FINFO,
"ignoring --%s-batch option sent to server\n",
* batch args to server. */
read_batch = write_batch = 0;
batch_name = NULL;
- }
+ } else if (dry_run)
+ write_batch = 0;
}
if (read_batch && files_from) {
snprintf(err_buf, sizeof err_buf,
return 0;
}
if (!files_from)
- recurse = -1; /* infinite recursion */
+ recurse = 1;
#ifdef SUPPORT_LINKS
preserve_links = 1;
#endif
omit_dir_times = 1;
if (log_format) {
- if (strstr(log_format, "%i") != NULL)
+ if (log_format_has(log_format, 'i'))
log_format_has_i = 1;
- if (strstr(log_format, "%b") == NULL
- && strstr(log_format, "%c") == NULL)
+ if (!log_format_has(log_format, 'b')
+ && !log_format_has(log_format, 'c'))
log_before_transfer = !am_server;
} else if (itemize_changes) {
log_format = "%i %n%L";
log_format = "%n%L";
log_before_transfer = !am_server;
}
- if (log_format_has_i
- || (log_format && strstr(log_format, "%o") != NULL))
+ if (log_format_has_i || log_format_has(log_format, 'o'))
log_format_has_o_or_i = 1;
if (daemon_bwlimit && (!bwlimit || bwlimit > daemon_bwlimit))
argstr[x++] = 'O';
if (preserve_perms)
argstr[x++] = 'p';
- if (recurse < 0)
+ if (recurse)
argstr[x++] = 'r';
if (always_checksum)
argstr[x++] = 'c';
/* This is a complete hack - blame Rusty. FIXME!
* This hack is only needed for older rsync versions that
* don't understand the --list-only option. */
- if (list_only == 1 && recurse >= 0)
+ if (list_only == 1 && !recurse)
argstr[x++] = 'r';
argstr[x] = 0;