Btrfs-progs: correcting misnamed parameter options for btrfs send

Unfortunately, the command line options for btrfs send were misnamed. The
-i option should not be used to give "clone sources", we'll be using -c
instead.

Compatibily note: -i option was broken anyway, which makes it less critical
renaming it. For potential users of the old option style, we emit a fatal
warning if the -i option is used.

Signed-off-by: Jan Schmidt <list.btrfs@jan-o-sch.net>
This commit is contained in:
Jan Schmidt 2012-11-06 21:47:07 +01:00 committed by David Sterba
parent e02556d64a
commit cc088694ff

View File

@ -236,7 +236,7 @@ out:
return ERR_PTR(ret);
}
static int do_send(struct btrfs_send *send, u64 root_id, u64 parent_root)
static int do_send(struct btrfs_send *send, u64 root_id, u64 parent_root_id)
{
int ret;
pthread_t t_read;
@ -289,7 +289,7 @@ static int do_send(struct btrfs_send *send, u64 root_id, u64 parent_root)
io_send.clone_sources = (__u64*)send->clone_sources;
io_send.clone_sources_count = send->clone_sources_count;
io_send.parent_root = parent_root;
io_send.parent_root = parent_root_id;
ret = ioctl(subvol_fd, BTRFS_IOC_SEND, &io_send);
if (ret) {
ret = -errno;
@ -426,6 +426,7 @@ int cmd_send_start(int argc, char **argv)
char *snapshot_parent = NULL;
u64 root_id;
u64 parent_root_id = 0;
int full_send = 1;
memset(&send, 0, sizeof(send));
send.dump_fd = fileno(stdout);
@ -435,12 +436,12 @@ int cmd_send_start(int argc, char **argv)
return 1;
}
while ((c = getopt(argc, argv, "vf:i:p:")) != -1) {
while ((c = getopt(argc, argv, "vc:f:i:p:")) != -1) {
switch (c) {
case 'v':
g_verbose++;
break;
case 'i': {
case 'c':
subvol = realpath(optarg, NULL);
if (!subvol) {
ret = -errno;
@ -462,12 +463,16 @@ int cmd_send_start(int argc, char **argv)
}
add_clone_source(&send, root_id);
free(subvol);
full_send = 0;
break;
}
case 'f':
outname = optarg;
break;
case 'p':
if (snapshot_parent) {
fprintf(stderr, "ERROR: you cannot have more than one parent (-p)\n");
return 1;
}
snapshot_parent = realpath(optarg, NULL);
if (!snapshot_parent) {
ret = -errno;
@ -475,7 +480,12 @@ int cmd_send_start(int argc, char **argv)
"%s\n", optarg, strerror(-ret));
goto out;
}
full_send = 0;
break;
case 'i':
fprintf(stderr,
"ERROR: -i was removed, use -c instead\n");
return 1;
case '?':
default:
fprintf(stderr, "ERROR: send args invalid.\n");
@ -581,10 +591,13 @@ int cmd_send_start(int argc, char **argv)
goto out;
}
if (!parent_root_id) {
if (!full_send && !parent_root_id) {
ret = find_good_parent(&send, root_id, &parent_root_id);
if (ret < 0)
parent_root_id = 0;
if (ret < 0) {
fprintf(stderr, "ERROR: parent determination failed for %lld\n",
root_id);
goto out;
}
}
ret = is_subvol_ro(&send, subvol);
@ -605,6 +618,7 @@ int cmd_send_start(int argc, char **argv)
add_clone_source(&send, root_id);
parent_root_id = 0;
full_send = 0;
free(subvol);
}
@ -622,32 +636,28 @@ static const char * const send_cmd_group_usage[] = {
};
static const char * const cmd_send_usage[] = {
"btrfs send [-v] [-i <subvol>] [-p <parent>] <subvol>",
"btrfs send [-v] [-p <parent>] [-c <clone-src>] <subvol>",
"Send the subvolume to stdout.",
"Sends the subvolume specified by <subvol> to stdout.",
"By default, this will send the whole subvolume. To do",
"an incremental send, one or multiple '-i <clone_source>'",
"arguments have to be specified. A 'clone source' is",
"a subvolume that is known to exist on the receiving",
"side in exactly the same state as on the sending side.\n",
"Normally, a good snapshot parent is searched automatically",
"in the list of 'clone sources'. To override this, use",
"'-p <parent>' to manually specify a snapshot parent.",
"A manually specified snapshot parent is also regarded",
"as 'clone source'.\n",
"-v Enable verbose debug output. Each",
" occurrency of this option increases the",
" verbose level more.",
"-i <subvol> Informs btrfs send that this subvolume,",
" can be taken as 'clone source'. This can",
" be used for incremental sends.",
"-p <subvol> Disable automatic snaphot parent",
" determination and use <subvol> as parent.",
" This subvolume is also added to the list",
" of 'clone sources' (see -i).",
"-f <outfile> Output is normally written to stdout.",
" To write to a file, use this option.",
" An alternative would be to use pipes.",
"By default, this will send the whole subvolume. To do an incremental",
"send, use '-p <parent>'. If you want to allow btrfs to clone from",
"any additional local snapshots, use -c <clone-src> (multiple times",
"where applicable). You must not specify clone sources unless you",
"guarantee that these snapshots are exactly in the same state on both",
"sides, the sender and the receiver. It is allowed to omit the",
"'-p <parent>' option when '-c <clone-src>' options are given, in",
"which case 'btrfs send' will determine a suitable parent among the",
"clone sources itself.",
"\n",
"-v Enable verbose debug output. Each occurrency of",
" this option increases the verbose level more.",
"-p <parent> Send an incremental stream from <parent> to",
" <subvol>.",
"-c <clone-src> Use this snapshot as a clone source for an ",
" incremental send (multiple allowed)",
"-f <outfile> Output is normally written to stdout. To write to",
" a file, use this option. An alternative would be to",
" use pipes.",
NULL
};