} else
DSS_INFO_LOG(("no suitable reference snapshot found\n"));
logname = dss_logname();
- if (use_rsync_locally(logname))
- (*argv)[i++] = dss_strdup(OPT_STRING_VAL(DSS, SOURCE_DIR));
- else
- (*argv)[i++] = make_message("%s@%s:%s/",
- OPT_GIVEN(DSS, REMOTE_USER)?
- OPT_STRING_VAL(DSS, REMOTE_USER) : logname,
- OPT_STRING_VAL(DSS, REMOTE_HOST),
- OPT_STRING_VAL(DSS, SOURCE_DIR));
+ N = OPT_GIVEN(DSS, SOURCE_DIR);
+ if (use_rsync_locally(logname)) {
+ for (j = 0; j < N; j++)
+ (*argv)[i++] = dss_strdup(lls_string_val(j,
+ OPT_RESULT(DSS, SOURCE_DIR)));
+ } else {
+ /*
+ * dss-1.0 and earlier did not support multiple source
+ * directories. These versions appended a slash to the end of
+ * the source directory to make sure that only the contents of
+ * the single source directory, but not the directory itself,
+ * are copied to the destination. For multiple source
+ * directories, however, this is not a good idea because the
+ * source directories may well contain identical file names,
+ * which would then be copied to the same location on the
+ * destination, overwriting each other. Moreover, we want the
+ * directory on the destination match the source. To preserve
+ * the old behaviour, we thus have to special-case N=1.
+ */
+ for (j = 0; j < N; j++) {
+ (*argv)[i++] = make_message("%s@%s:%s%s",
+ OPT_GIVEN(DSS, REMOTE_USER)?
+ OPT_STRING_VAL(DSS, REMOTE_USER) : logname,
+ OPT_STRING_VAL(DSS, REMOTE_HOST),
+ lls_string_val(j, OPT_RESULT(DSS, SOURCE_DIR)),
+ N == 1? "/" : ""
+ );
+ }
+ }
free(logname);
*num = get_current_time();
(*argv)[i++] = incomplete_name(*num);
typestr = dirname
arg_info = required_arg
arg_type = string
+ flag multiple
[help]
The directory on the remote host from which snapshots are taken.
Of course, the user specified as --remote-user must have read access
to this directory.
- This option is mandatory for the create and run subcommands: It must
- be given at the command line or in the config file.
+ This option is mandatory for the create and run subcommands: It may
+ be given multiple times to specify more than one source directory.
+ However, all source directories must reside on the same server.
[/help]
[option dest-dir]
summary = where snapshots are stored
written. This must be writable by the user who runs dss.
This option is mandatory for all subcommands except kill.
+ Unlike --source-dir, this option may only be given once.
[/help]
[option mountpoint]
summary = abort if destination directory is not a mountpoint