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;
|
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,
|
create_options = append_option_parameters(create_options,
|
||||||
drv->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);
|
print_option_help(create_options);
|
||||||
free_option_parameters(create_options);
|
free_option_parameters(create_options);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -394,10 +397,16 @@ static int img_create(int argc, char **argv)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get the filename */
|
/* 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) {
|
if (optind >= argc) {
|
||||||
help();
|
help();
|
||||||
}
|
}
|
||||||
filename = argv[optind++];
|
optind++;
|
||||||
|
|
||||||
/* Get image size, if specified */
|
/* Get image size, if specified */
|
||||||
if (optind < argc) {
|
if (optind < argc) {
|
||||||
|
@ -421,11 +430,6 @@ static int img_create(int argc, char **argv)
|
||||||
help();
|
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,
|
bdrv_img_create(filename, fmt, base_filename, base_fmt,
|
||||||
options, img_size, BDRV_O_FLAGS, &local_err, quiet);
|
options, img_size, BDRV_O_FLAGS, &local_err, quiet);
|
||||||
if (local_err) {
|
if (local_err) {
|
||||||
|
@ -1269,17 +1273,18 @@ static int img_convert(int argc, char **argv)
|
||||||
}
|
}
|
||||||
|
|
||||||
bs_n = argc - optind - 1;
|
bs_n = argc - optind - 1;
|
||||||
if (bs_n < 1) {
|
out_filename = bs_n >= 1 ? argv[argc - 1] : NULL;
|
||||||
help();
|
|
||||||
}
|
|
||||||
|
|
||||||
out_filename = argv[argc - 1];
|
|
||||||
|
|
||||||
if (options && has_help_option(options)) {
|
if (options && has_help_option(options)) {
|
||||||
ret = print_block_option_help(out_filename, out_fmt);
|
ret = print_block_option_help(out_filename, out_fmt);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (bs_n < 1) {
|
||||||
|
help();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (bs_n > 1 && out_baseimg) {
|
if (bs_n > 1 && out_baseimg) {
|
||||||
error_report("-B makes no sense when concatenating multiple input "
|
error_report("-B makes no sense when concatenating multiple input "
|
||||||
"images");
|
"images");
|
||||||
|
@ -2689,15 +2694,21 @@ static int img_amend(int argc, char **argv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (optind != argc - 1) {
|
|
||||||
help();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!options) {
|
if (!options) {
|
||||||
help();
|
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);
|
bs = bdrv_new_open(filename, fmt, BDRV_O_FLAGS | BDRV_O_RDWR, true, quiet);
|
||||||
if (!bs) {
|
if (!bs) {
|
||||||
|
@ -2709,6 +2720,7 @@ static int img_amend(int argc, char **argv)
|
||||||
fmt = bs->drv->format_name;
|
fmt = bs->drv->format_name;
|
||||||
|
|
||||||
if (has_help_option(options)) {
|
if (has_help_option(options)) {
|
||||||
|
/* If the format was auto-detected, print option help here */
|
||||||
ret = print_block_option_help(filename, fmt);
|
ret = print_block_option_help(filename, fmt);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue