qemu-option: improve qemu_opts_print_help() output

Modify qemu_opts_print_help():
- to print expected argument type
- skip description if not available
- sort lines
- prefix with the list name (like qdev, to avoid confusion)
- drop 16-chars alignment, use a '-' as seperator for option name and
  description

For ex, "-spice help" output is changed from:

port             No description available
tls-port         No description available
addr             No description available
[...]
gl               No description available
rendernode       No description available

to:

spice.addr=str
spice.agent-mouse=bool (on/off)
spice.disable-agent-file-xfer=bool (on/off)
[...]
spice.x509-key-password=str
spice.zlib-glz-wan-compression=str

"qemu-img create -f qcow2 -o help", changed from:

size             Virtual disk size
compat           Compatibility level (0.10 or 1.1)
backing_file     File name of a base image
[...]
lazy_refcounts   Postpone refcount updates
refcount_bits    Width of a reference count entry in bits

to:

backing_file=str - File name of a base image
backing_fmt=str - Image format of the base image
cluster_size=size - qcow2 cluster size
[...]
refcount_bits=num - Width of a reference count entry in bits
size=size - Virtual disk size

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
Marc-André Lureau 2018-08-14 17:08:04 +02:00
parent e05979d0d7
commit 9cbef9d68e

View File

@ -208,17 +208,51 @@ out:
return result;
}
static const char *opt_type_to_string(enum QemuOptType type)
{
switch (type) {
case QEMU_OPT_STRING:
return "str";
case QEMU_OPT_BOOL:
return "bool (on/off)";
case QEMU_OPT_NUMBER:
return "num";
case QEMU_OPT_SIZE:
return "size";
}
g_assert_not_reached();
}
void qemu_opts_print_help(QemuOptsList *list)
{
QemuOptDesc *desc;
int i;
GPtrArray *array = g_ptr_array_new();
assert(list);
desc = list->desc;
while (desc && desc->name) {
printf("%-16s %s\n", desc->name,
desc->help ? desc->help : "No description available");
GString *str = g_string_new(NULL);
if (list->name) {
g_string_append_printf(str, "%s.", list->name);
}
g_string_append_printf(str, "%s=%s", desc->name,
opt_type_to_string(desc->type));
if (desc->help) {
g_string_append_printf(str, " - %s", desc->help);
}
g_ptr_array_add(array, g_string_free(str, false));
desc++;
}
g_ptr_array_sort(array, (GCompareFunc)qemu_pstrcmp0);
for (i = 0; i < array->len; i++) {
printf("%s\n", (char *)array->pdata[i]);
}
g_ptr_array_set_free_func(array, g_free);
g_ptr_array_free(array, true);
}
/* ------------------------------------------------------------------ */