rprintf(F,"\nrsync is a file transfer program capable of efficient remote update\nvia a fast differencing algorithm.\n\n");
- rprintf(F,"Usage: rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST\n");
+ rprintf(F,"Usage: rsync [OPTION]... SRC [SRC]... DEST\n");
+ rprintf(F," or rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST\n");
+ rprintf(F," or rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST\n");
+ rprintf(F," or rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST\n");
rprintf(F," or rsync [OPTION]... [USER@]HOST:SRC [DEST]\n");
- rprintf(F," or rsync [OPTION]... SRC [SRC]... DEST\n");
rprintf(F," or rsync [OPTION]... [USER@]HOST::SRC [DEST]\n");
- rprintf(F," or rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST\n");
rprintf(F," or rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]\n");
- rprintf(F," or rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST\n");
- rprintf(F,"SRC on single-colon remote HOST will be expanded by remote shell\n");
- rprintf(F,"SRC on server remote HOST may contain shell wildcards or multiple\n");
- rprintf(F," sources separated by space as long as they have same top-level\n");
+ rprintf(F,"The ':' usages connect via remote shell, while '::' & 'rsync://' usages connect\n");
+ rprintf(F,"to an rsync daemon, and require SRC or DEST to start with a module name.\n");
rprintf(F,"\nOptions\n");
rprintf(F," -v, --verbose increase verbosity\n");
rprintf(F," -q, --quiet suppress non-error messages\n");
{"version", 0, POPT_ARG_NONE, 0, OPT_VERSION, 0, 0},
{"verbose", 'v', POPT_ARG_NONE, 0, 'v', 0, 0 },
{"no-verbose", 0, POPT_ARG_VAL, &verbose, 0, 0, 0 },
+ {"no-v", 0, POPT_ARG_VAL, &verbose, 0, 0, 0 },
{"quiet", 'q', POPT_ARG_NONE, 0, 'q', 0, 0 },
{"stats", 0, POPT_ARG_NONE, &do_stats, 0, 0, 0 },
{"dry-run", 'n', POPT_ARG_NONE, &dry_run, 0, 0, 0 },
{"port", 0, POPT_ARG_INT, &rsync_port, 0, 0, 0 },
{"protocol", 0, POPT_ARG_INT, &protocol_version, 0, 0, 0 },
{"server", 0, POPT_ARG_NONE, &am_server, 0, 0, 0 },
+ {"temp-dir", 'T', POPT_ARG_STRING, &tmpdir, 0, 0, 0 },
{"verbose", 'v', POPT_ARG_NONE, 0, 'v', 0, 0 },
+ {"no-verbose", 0, POPT_ARG_VAL, &verbose, 0, 0, 0 },
+ {"no-v", 0, POPT_ARG_VAL, &verbose, 0, 0, 0 },
{"help", 'h', POPT_ARG_NONE, 0, 'h', 0, 0 },
{0,0,0,0, 0, 0, 0}
};
goto daemon_error;
}
}
+
+ if (tmpdir && strlen(tmpdir) >= MAXPATHLEN - 10) {
+ snprintf(err_buf, sizeof err_buf,
+ "the --temp-dir path is WAY too long.\n");
+ return 0;
+ }
+
if (!daemon_opt) {
rprintf(FERROR, "Daemon option(s) used without --daemon.\n");
daemon_error:
"(Type \"rsync --daemon --help\" for assistance with daemon mode.)\n");
exit_cleanup(RERR_SYNTAX);
}
+
*argv = poptGetArgs(pc);
*argc = count_args(*argv);
am_starting_up = 0;
"You may not combine multiple --delete-WHEN options.\n");
return 0;
}
- if (!recurse) {
+ if (!xfer_dirs) {
delete_before = delete_during = delete_after = 0;
delete_mode = delete_excluded = 0;
} else if (delete_before || delete_during || delete_after)
bwlimit_writemax = 512;
}
+ if (sparse_files && inplace) {
+ /* Note: we don't check for this below, because --append is
+ * OK with --sparse (as long as redos are handled right). */
+ snprintf(err_buf, sizeof err_buf,
+ "--sparse cannot be used with --inplace\n");
+ return 0;
+ }
+
if (append_mode) {
if (whole_file > 0) {
snprintf(err_buf, sizeof err_buf,