qemu-img: Allow -o help with incomplete argument list
This patch allows using 'qemu-img $subcmd -o help' for the create, convert and amend subcommands, without specifying the previously required filename arguments. Note that it's still allowed and meaningful to specify a filename: An invocation like 'qemu-img create -o help sheepdog:foo' will also display options that are provided by the Sheepdog driver. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Jeff Cody <jcody@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
626f84f39d
commit
a283cb6e58
60
qemu-img.c
60
qemu-img.c
@ -250,16 +250,19 @@ static int print_block_option_help(const char *filename, const char *fmt)
|
||||
return 1;
|
||||
}
|
||||
|
||||
proto_drv = bdrv_find_protocol(filename, true);
|
||||
if (!proto_drv) {
|
||||
error_report("Unknown protocol '%s'", filename);
|
||||
return 1;
|
||||
}
|
||||
|
||||
create_options = append_option_parameters(create_options,
|
||||
drv->create_options);
|
||||
create_options = append_option_parameters(create_options,
|
||||
proto_drv->create_options);
|
||||
|
||||
if (filename) {
|
||||
proto_drv = bdrv_find_protocol(filename, true);
|
||||
if (!proto_drv) {
|
||||
error_report("Unknown protocol '%s'", filename);
|
||||
return 1;
|
||||
}
|
||||
create_options = append_option_parameters(create_options,
|
||||
proto_drv->create_options);
|
||||
}
|
||||
|
||||
print_option_help(create_options);
|
||||
free_option_parameters(create_options);
|
||||
return 0;
|
||||
@ -394,10 +397,16 @@ static int img_create(int argc, char **argv)
|
||||
}
|
||||
|
||||
/* Get the filename */
|
||||
filename = (optind < argc) ? argv[optind] : NULL;
|
||||
if (options && has_help_option(options)) {
|
||||
g_free(options);
|
||||
return print_block_option_help(filename, fmt);
|
||||
}
|
||||
|
||||
if (optind >= argc) {
|
||||
help();
|
||||
}
|
||||
filename = argv[optind++];
|
||||
optind++;
|
||||
|
||||
/* Get image size, if specified */
|
||||
if (optind < argc) {
|
||||
@ -421,11 +430,6 @@ static int img_create(int argc, char **argv)
|
||||
help();
|
||||
}
|
||||
|
||||
if (options && has_help_option(options)) {
|
||||
g_free(options);
|
||||
return print_block_option_help(filename, fmt);
|
||||
}
|
||||
|
||||
bdrv_img_create(filename, fmt, base_filename, base_fmt,
|
||||
options, img_size, BDRV_O_FLAGS, &local_err, quiet);
|
||||
if (local_err) {
|
||||
@ -1269,17 +1273,18 @@ static int img_convert(int argc, char **argv)
|
||||
}
|
||||
|
||||
bs_n = argc - optind - 1;
|
||||
if (bs_n < 1) {
|
||||
help();
|
||||
}
|
||||
|
||||
out_filename = argv[argc - 1];
|
||||
out_filename = bs_n >= 1 ? argv[argc - 1] : NULL;
|
||||
|
||||
if (options && has_help_option(options)) {
|
||||
ret = print_block_option_help(out_filename, out_fmt);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (bs_n < 1) {
|
||||
help();
|
||||
}
|
||||
|
||||
|
||||
if (bs_n > 1 && out_baseimg) {
|
||||
error_report("-B makes no sense when concatenating multiple input "
|
||||
"images");
|
||||
@ -2689,15 +2694,21 @@ static int img_amend(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
if (optind != argc - 1) {
|
||||
help();
|
||||
}
|
||||
|
||||
if (!options) {
|
||||
help();
|
||||
}
|
||||
|
||||
filename = argv[argc - 1];
|
||||
filename = (optind == argc - 1) ? argv[argc - 1] : NULL;
|
||||
if (fmt && has_help_option(options)) {
|
||||
/* If a format is explicitly specified (and possibly no filename is
|
||||
* given), print option help here */
|
||||
ret = print_block_option_help(filename, fmt);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (optind != argc - 1) {
|
||||
help();
|
||||
}
|
||||
|
||||
bs = bdrv_new_open(filename, fmt, BDRV_O_FLAGS | BDRV_O_RDWR, true, quiet);
|
||||
if (!bs) {
|
||||
@ -2709,6 +2720,7 @@ static int img_amend(int argc, char **argv)
|
||||
fmt = bs->drv->format_name;
|
||||
|
||||
if (has_help_option(options)) {
|
||||
/* If the format was auto-detected, print option help here */
|
||||
ret = print_block_option_help(filename, fmt);
|
||||
goto out;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user