char *backup_suffix = NULL;
char *tmpdir = NULL;
+char *partial_dir = NULL;
char *compare_dest = NULL;
char *config_file = NULL;
char *shell_cmd = NULL;
get_panic_action());
#endif
-#ifdef NO_INT64
- rprintf(f, "WARNING: no 64-bit integers on this platform!\n");
+#ifdef INT64_IS_OFF_T
+ if (sizeof (int64) < 8)
+ rprintf(f, "WARNING: no 64-bit integers on this platform!\n");
#endif
rprintf(f,
rprintf(F," --backup-dir make backups into this directory\n");
rprintf(F," --suffix=SUFFIX backup suffix (default %s w/o --backup-dir)\n",BACKUP_SUFFIX);
rprintf(F," -u, --update update only (don't overwrite newer files)\n");
- rprintf(F," --inplace update the destination file inplace (see man page)\n");
+ rprintf(F," --inplace update destination files inplace (SEE MAN PAGE)\n");
rprintf(F," -K, --keep-dirlinks treat symlinked dir on receiver as dir\n");
rprintf(F," -l, --links copy symlinks as symlinks\n");
rprintf(F," -L, --copy-links copy the referent of all symlinks\n");
rprintf(F," --ignore-errors delete even if there are I/O errors\n");
rprintf(F," --max-delete=NUM don't delete more than NUM files\n");
rprintf(F," --partial keep partially transferred files\n");
+ rprintf(F," --partial-dir=DIR put a partially transferred file into DIR\n");
rprintf(F," --force force deletion of directories even if not empty\n");
rprintf(F," --numeric-ids don't map uid/gid values by user/group name\n");
rprintf(F," --timeout=TIME set I/O timeout in seconds\n");
rprintf(F," -I, --ignore-times turn off mod time & file size quick check\n");
rprintf(F," --size-only ignore mod time for quick check (use 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," -T, --temp-dir=DIR create temporary files in directory DIR\n");
rprintf(F," --compare-dest=DIR also compare destination files relative to DIR\n");
rprintf(F," --link-dest=DIR create hardlinks to DIR for unchanged files\n");
rprintf(F," -P equivalent to --partial --progress\n");
rprintf(F," --include=PATTERN don't exclude files matching PATTERN\n");
rprintf(F," --include-from=FILE don't exclude patterns listed in FILE\n");
rprintf(F," --files-from=FILE read FILE for list of source-file names\n");
- rprintf(F," -0 --from0 all *-from file lists are delimited by nulls\n");
+ rprintf(F," -0, --from0 all *-from file lists are delimited by nulls\n");
rprintf(F," --version print version number\n");
rprintf(F," --daemon run as an rsync daemon\n");
rprintf(F," --no-detach do not detach from the parent\n");
rprintf(F," --read-batch=FILE read a batch from FILE\n");
rprintf(F," --checksum-seed=NUM set block/file checksum seed\n");
#ifdef INET6
- rprintf(F," -4 --ipv4 prefer IPv4\n");
- rprintf(F," -6 --ipv6 prefer IPv6\n");
+ rprintf(F," -4, --ipv4 prefer IPv4\n");
+ rprintf(F," -6, --ipv6 prefer IPv6\n");
#endif
rprintf(F," -h, --help show this help screen\n");
{"stats", 0, POPT_ARG_NONE, &do_stats, 0, 0, 0 },
{"progress", 0, POPT_ARG_NONE, &do_progress, 0, 0, 0 },
{"partial", 0, POPT_ARG_NONE, &keep_partial, 0, 0, 0 },
+ {"partial-dir", 0, POPT_ARG_STRING, &partial_dir, 0, 0, 0 },
{"ignore-errors", 0, POPT_ARG_NONE, &ignore_errors, 0, 0, 0 },
{"blocking-io", 0, POPT_ARG_VAL, &blocking_io, 1, 0, 0 },
{"no-blocking-io", 0, POPT_ARG_VAL, &blocking_io, 0, 0, 0 },
if (write_batch && read_batch) {
rprintf(FERROR,
- "write-batch and read-batch can not be used together\n");
+ "--write-batch and --read-batch can not be used together\n");
exit_cleanup(RERR_SYNTAX);
}
if (write_batch || read_batch) {
batch_name = NULL;
}
}
+ if (read_batch && files_from) {
+ rprintf(FERROR,
+ "--read-batch cannot be used with --files-from\n");
+ exit_cleanup(RERR_SYNTAX);
+ }
if (batch_name && strlen(batch_name) > MAX_BATCH_NAME_LEN) {
rprintf(FERROR,
"the batch-file name must be %d characters or less.\n",
(*argv)[i] = alloc_sanitize_path((*argv)[i], NULL);
if (tmpdir)
tmpdir = alloc_sanitize_path(tmpdir, curr_dir);
+ if (partial_dir)
+ partial_dir = alloc_sanitize_path(partial_dir, curr_dir);
if (compare_dest)
compare_dest = alloc_sanitize_path(compare_dest, curr_dir);
if (backup_dir)
if (inplace) {
#if HAVE_FTRUNCATE
+ if (partial_dir) {
+ snprintf(err_buf, sizeof err_buf,
+ "--inplace cannot be used with --partial-dir\n");
+ return 0;
+ }
keep_partial = 0;
#else
snprintf(err_buf, sizeof err_buf,
- "inplace is not supported on this %s\n",
+ "--inplace is not supported on this %s\n",
am_server ? "server" : "client");
return 0;
#endif
+ } else if (partial_dir) {
+ if (strcmp(partial_dir, ".") == 0)
+ partial_dir = NULL;
+ keep_partial = 1;
}
if (files_from) {
args[ac++] = arg;
}
- if (keep_partial)
+ if (partial_dir && am_sender) {
+ args[ac++] = "--partial-dir";
+ args[ac++] = partial_dir;
+ } else if (keep_partial)
args[ac++] = "--partial";
if (force_delete)