* [Qemu-devel] [PATCH 0/2] Document qemu-img create -o
@ 2009-06-04 13:39 Kevin Wolf
2009-06-04 13:39 ` [Qemu-devel] [PATCH 1/2] qemu-img: Print available options with -o ? Kevin Wolf
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Kevin Wolf @ 2009-06-04 13:39 UTC (permalink / raw)
To: qemu-devel; +Cc: Kevin Wolf
The bad habit of implementing things and no letting anybody know what has
hanged... This patch series makes the qemu-img -o option actually usable
without reading the code by documenting things.
Kevin Wolf (2):
qemu-img: Print available options with -o ?
Document changes in qemu-img interface
block/cow.c | 12 ++++++++++--
block/qcow.c | 18 +++++++++++++++---
block/qcow2.c | 30 +++++++++++++++++++++++++-----
block/raw-posix.c | 6 +++++-
block/raw-win32.c | 6 +++++-
block/vmdk.c | 18 +++++++++++++++---
block/vpc.c | 6 +++++-
qemu-img.c | 27 ++++++++++++++++++++-------
qemu-img.texi | 32 ++++++++++++++++++--------------
qemu-option.c | 13 +++++++++++++
qemu-option.h | 2 ++
11 files changed, 133 insertions(+), 37 deletions(-)
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Qemu-devel] [PATCH 1/2] qemu-img: Print available options with -o ?
2009-06-04 13:39 [Qemu-devel] [PATCH 0/2] Document qemu-img create -o Kevin Wolf
@ 2009-06-04 13:39 ` Kevin Wolf
2009-06-04 13:39 ` [Qemu-devel] [PATCH 2/2] Document changes in qemu-img interface Kevin Wolf
2009-06-06 15:45 ` [Qemu-devel] [PATCH 0/2] Document qemu-img create -o Blue Swirl
2 siblings, 0 replies; 4+ messages in thread
From: Kevin Wolf @ 2009-06-04 13:39 UTC (permalink / raw)
To: qemu-devel; +Cc: Kevin Wolf
This patch adds a small help text to each of the options in the block drivers
which can be displayed by using qemu-img create -f fmt -o ?
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
block/cow.c | 12 ++++++++++--
block/qcow.c | 18 +++++++++++++++---
block/qcow2.c | 30 +++++++++++++++++++++++++-----
block/raw-posix.c | 6 +++++-
block/raw-win32.c | 6 +++++-
block/vmdk.c | 18 +++++++++++++++---
block/vpc.c | 6 +++++-
qemu-img.c | 18 +++++++++++++++---
qemu-option.c | 13 +++++++++++++
qemu-option.h | 2 ++
10 files changed, 110 insertions(+), 19 deletions(-)
diff --git a/block/cow.c b/block/cow.c
index 41d292a..84818f1 100644
--- a/block/cow.c
+++ b/block/cow.c
@@ -262,8 +262,16 @@ static void cow_flush(BlockDriverState *bs)
}
static QEMUOptionParameter cow_create_options[] = {
- { BLOCK_OPT_SIZE, OPT_SIZE },
- { BLOCK_OPT_BACKING_FILE, OPT_STRING },
+ {
+ .name = BLOCK_OPT_SIZE,
+ .type = OPT_SIZE,
+ .help = "Virtual disk size"
+ },
+ {
+ .name = BLOCK_OPT_BACKING_FILE,
+ .type = OPT_STRING,
+ .help = "File name of a base image"
+ },
{ NULL }
};
diff --git a/block/qcow.c b/block/qcow.c
index 329b364..55a68a6 100644
--- a/block/qcow.c
+++ b/block/qcow.c
@@ -909,9 +909,21 @@ static int qcow_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
static QEMUOptionParameter qcow_create_options[] = {
- { BLOCK_OPT_SIZE, OPT_SIZE },
- { BLOCK_OPT_BACKING_FILE, OPT_STRING },
- { BLOCK_OPT_ENCRYPT, OPT_FLAG },
+ {
+ .name = BLOCK_OPT_SIZE,
+ .type = OPT_SIZE,
+ .help = "Virtual disk size"
+ },
+ {
+ .name = BLOCK_OPT_BACKING_FILE,
+ .type = OPT_STRING,
+ .help = "File name of a base image"
+ },
+ {
+ .name = BLOCK_OPT_ENCRYPT,
+ .type = OPT_FLAG,
+ .help = "Encrypt the image"
+ },
{ NULL }
};
diff --git a/block/qcow2.c b/block/qcow2.c
index d1611d1..c2be42e 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -2981,11 +2981,31 @@ static int qcow_get_buffer(BlockDriverState *bs, uint8_t *buf,
}
static QEMUOptionParameter qcow_create_options[] = {
- { BLOCK_OPT_SIZE, OPT_SIZE },
- { BLOCK_OPT_BACKING_FILE, OPT_STRING },
- { BLOCK_OPT_BACKING_FMT, OPT_STRING },
- { BLOCK_OPT_ENCRYPT, OPT_FLAG },
- { BLOCK_OPT_CLUSTER_SIZE, OPT_SIZE },
+ {
+ .name = BLOCK_OPT_SIZE,
+ .type = OPT_SIZE,
+ .help = "Virtual disk size"
+ },
+ {
+ .name = BLOCK_OPT_BACKING_FILE,
+ .type = OPT_STRING,
+ .help = "File name of a base image"
+ },
+ {
+ .name = BLOCK_OPT_BACKING_FMT,
+ .type = OPT_STRING,
+ .help = "Image format of the base image"
+ },
+ {
+ .name = BLOCK_OPT_ENCRYPT,
+ .type = OPT_FLAG,
+ .help = "Encrypt the image"
+ },
+ {
+ .name = BLOCK_OPT_CLUSTER_SIZE,
+ .type = OPT_SIZE,
+ .help = "qcow2 cluster size"
+ },
{ NULL }
};
diff --git a/block/raw-posix.c b/block/raw-posix.c
index 38c4aa7..4798d62 100644
--- a/block/raw-posix.c
+++ b/block/raw-posix.c
@@ -858,7 +858,11 @@ static void raw_flush(BlockDriverState *bs)
static QEMUOptionParameter raw_create_options[] = {
- { BLOCK_OPT_SIZE, OPT_SIZE },
+ {
+ .name = BLOCK_OPT_SIZE,
+ .type = OPT_SIZE,
+ .help = "Virtual disk size"
+ },
{ NULL }
};
diff --git a/block/raw-win32.c b/block/raw-win32.c
index 6e5c09b..1e95153 100644
--- a/block/raw-win32.c
+++ b/block/raw-win32.c
@@ -234,7 +234,11 @@ static int raw_create(const char *filename, QEMUOptionParameter *options)
}
static QEMUOptionParameter raw_create_options[] = {
- { BLOCK_OPT_SIZE, OPT_SIZE },
+ {
+ .name = BLOCK_OPT_SIZE,
+ .type = OPT_SIZE,
+ .help = "Virtual disk size"
+ },
{ NULL }
};
diff --git a/block/vmdk.c b/block/vmdk.c
index b3ea686..f21f02b 100644
--- a/block/vmdk.c
+++ b/block/vmdk.c
@@ -828,9 +828,21 @@ static void vmdk_flush(BlockDriverState *bs)
static QEMUOptionParameter vmdk_create_options[] = {
- { BLOCK_OPT_SIZE, OPT_SIZE },
- { BLOCK_OPT_BACKING_FILE, OPT_STRING },
- { BLOCK_OPT_COMPAT6, OPT_FLAG },
+ {
+ .name = BLOCK_OPT_SIZE,
+ .type = OPT_SIZE,
+ .help = "Virtual disk size"
+ },
+ {
+ .name = BLOCK_OPT_BACKING_FILE,
+ .type = OPT_STRING,
+ .help = "File name of a base image"
+ },
+ {
+ .name = BLOCK_OPT_COMPAT6,
+ .type = OPT_FLAG,
+ .help = "VMDK version 6 image"
+ },
{ NULL }
};
diff --git a/block/vpc.c b/block/vpc.c
index 662a6f6..ba482e9 100644
--- a/block/vpc.c
+++ b/block/vpc.c
@@ -594,7 +594,11 @@ static void vpc_close(BlockDriverState *bs)
}
static QEMUOptionParameter vpc_create_options[] = {
- { "size", OPT_SIZE },
+ {
+ .name = BLOCK_OPT_SIZE,
+ .type = OPT_SIZE,
+ .help = "Virtual disk size"
+ },
{ NULL }
};
diff --git a/qemu-img.c b/qemu-img.c
index 3edf25a..947e71b 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -281,15 +281,17 @@ static int img_create(int argc, char **argv)
break;
}
}
- if (optind >= argc)
- help();
- filename = argv[optind++];
/* Find driver and parse its options */
drv = bdrv_find_format(fmt);
if (!drv)
error("Unknown file format '%s'", fmt);
+ if (options && !strcmp(options, "?")) {
+ print_option_help(drv->create_options);
+ return 0;
+ }
+
if (options) {
param = parse_option_parameters(options, drv->create_options, param);
if (param == NULL) {
@@ -299,6 +301,11 @@ static int img_create(int argc, char **argv)
param = parse_option_parameters("", drv->create_options, param);
}
+ /* Get the filename */
+ if (optind >= argc)
+ help();
+ filename = argv[optind++];
+
/* Add size to parameters */
if (optind < argc) {
set_option_parameter(param, BLOCK_OPT_SIZE, argv[optind++]);
@@ -596,6 +603,11 @@ static int img_convert(int argc, char **argv)
if (!drv)
error("Unknown file format '%s'", out_fmt);
+ if (options && !strcmp(options, "?")) {
+ print_option_help(drv->create_options);
+ return 0;
+ }
+
if (options) {
param = parse_option_parameters(options, drv->create_options, param);
if (param == NULL) {
diff --git a/qemu-option.c b/qemu-option.c
index 3cebdd5..646bbad 100644
--- a/qemu-option.c
+++ b/qemu-option.c
@@ -347,3 +347,16 @@ void print_option_parameters(QEMUOptionParameter *list)
list++;
}
}
+
+/*
+ * Prints an overview of all available options
+ */
+void print_option_help(QEMUOptionParameter *list)
+{
+ printf("Supported options:\n");
+ while (list && list->name) {
+ printf("%-16s %s\n", list->name,
+ list->help ? list->help : "No description available");
+ list++;
+ }
+}
diff --git a/qemu-option.h b/qemu-option.h
index ac24694..059c0a4 100644
--- a/qemu-option.h
+++ b/qemu-option.h
@@ -40,6 +40,7 @@ typedef struct QEMUOptionParameter {
uint64_t n;
char* s;
} value;
+ const char *help;
} QEMUOptionParameter;
@@ -63,5 +64,6 @@ QEMUOptionParameter *parse_option_parameters(const char *param,
QEMUOptionParameter *list, QEMUOptionParameter *dest);
void free_option_parameters(QEMUOptionParameter *list);
void print_option_parameters(QEMUOptionParameter *list);
+void print_option_help(QEMUOptionParameter *list);
#endif
--
1.6.0.6
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [Qemu-devel] [PATCH 2/2] Document changes in qemu-img interface
2009-06-04 13:39 [Qemu-devel] [PATCH 0/2] Document qemu-img create -o Kevin Wolf
2009-06-04 13:39 ` [Qemu-devel] [PATCH 1/2] qemu-img: Print available options with -o ? Kevin Wolf
@ 2009-06-04 13:39 ` Kevin Wolf
2009-06-06 15:45 ` [Qemu-devel] [PATCH 0/2] Document qemu-img create -o Blue Swirl
2 siblings, 0 replies; 4+ messages in thread
From: Kevin Wolf @ 2009-06-04 13:39 UTC (permalink / raw)
To: qemu-devel; +Cc: Kevin Wolf
Update the documentation to reflect the introduction of format specific options
with -o. Don't advertise -e or -6 any more, they exist only for compatibility
reasons and can be replaced by the corresponding -o options.
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
qemu-img.c | 9 +++++----
qemu-img.texi | 32 ++++++++++++++++++--------------
2 files changed, 23 insertions(+), 18 deletions(-)
diff --git a/qemu-img.c b/qemu-img.c
index 947e71b..aff3980 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -59,9 +59,9 @@ static void help(void)
"\n"
"Command syntax:\n"
" check [-f fmt] filename\n"
- " create [-e] [-6] [-F fmt] [-b base_image] [-f fmt] filename [size]\n"
+ " create [-F fmt] [-b base_image] [-f fmt] [-o options] filename [size]\n"
" commit [-f fmt] filename\n"
- " convert [-c] [-e] [-6] [-f fmt] [-O output_fmt] [-B output_base_image] filename [filename2 [...]] output_filename\n"
+ " convert [-c] [-f fmt] [-O output_fmt] [-o options] [-B output_base_image] filename [filename2 [...]] output_filename\n"
" info [-f fmt] filename\n"
" snapshot [-l | -a snapshot | -c snapshot | -d snapshot] filename\n"
"\n"
@@ -79,9 +79,10 @@ static void help(void)
" supported any 'k' or 'K' is ignored\n"
" 'output_filename' is the destination disk image filename\n"
" 'output_fmt' is the destination format\n"
+ " 'options' is a comma separated list of format specific options in a\n"
+ " name=value format. Use -o ? for an overview of the options supported by the\n"
+ " used format\n"
" '-c' indicates that target image must be compressed (qcow format only)\n"
- " '-e' indicates that the target image must be encrypted (qcow format only)\n"
- " '-6' indicates that the target image must use compatibility level 6 (vmdk format only)\n"
" '-h' with or without a command shows this help and lists the supported formats\n"
"\n"
"Parameters to snapshot subcommand:\n"
diff --git a/qemu-img.texi b/qemu-img.texi
index deef2ab..dae7b82 100644
--- a/qemu-img.texi
+++ b/qemu-img.texi
@@ -8,9 +8,9 @@ usage: qemu-img command [command options]
The following commands are supported:
@table @option
-@item create [-e] [-6] [-F @var{base_fmt}] [-b @var{base_image}] [-f @var{fmt}] @var{filename} [@var{size}]
+@item create [-F @var{base_fmt}] [-b @var{base_image}] [-f @var{fmt}] [-o @var{options}] @var{filename} [@var{size}]
@item commit [-f @var{fmt}] @var{filename}
-@item convert [-c] [-e] [-6] [-f @var{fmt}] [-O @var{output_fmt}] [-B @var{output_base_image}] @var{filename} [@var{filename2} [...]] @var{output_filename}
+@item convert [-c] [-f @var{fmt}] [-O @var{output_fmt}] [-o @var{options}] [-B @var{output_base_image}] @var{filename} [@var{filename2} [...]] @var{output_filename}
@item info [-f @var{fmt}] @var{filename}
@item snapshot [-l | -a @var{snapshot} | -c @var{snapshot} | -d @var{snapshot}] @var{filename}
@end table
@@ -61,22 +61,23 @@ CD-ROM images present for example in the Knoppix CD-ROMs.
@end table
@item size
-is the disk image size in kilobytes. Optional suffixes @code{M}
-(megabyte, 1024 * 1024) and @code{G} (gigabyte, 1024 * 1024 * 1024)
-are supported and any @code{k} or @code{K} is ignored.
+is the disk image size in bytes. Optional suffixes @code{k} or @code{K}
+(kilobyte, 1024) @code{M} (megabyte, 1024k) and @code{G} (gigabyte, 1024M)
+and T (terabyte, 1024G) are supported. @code{b} is ignored.
@item output_filename
is the destination disk image filename
@item output_fmt
is the destination format
+@item options
+is a comma separated list of format specific options in a
+name=value format. Use @code{-o ?} for an overview of the options supported
+by the used format
+
@item -c
indicates that target image must be compressed (qcow format only)
-@item -e
-indicates that the target image must be encrypted (qcow format only)
-@item -6
-indicates that the target image must use compatibility level 6 (vmdk format only)
@item -h
with or without a command shows help and lists the supported formats
@end table
@@ -100,7 +101,7 @@ lists all snapshots in the given image
Command description:
@table @option
-@item create [-6] [-e] [-b @var{base_image}] [-f @var{fmt}] @var{filename} [@var{size}]
+@item create [-F @var{base_fmt}] [-b @var{base_image}] [-f @var{fmt}] [-o @var{options}] @var{filename} [@var{size}]
Create the new disk image @var{filename} of size @var{size} and format
@var{fmt}.
@@ -110,17 +111,20 @@ differences from @var{base_image}. No size needs to be specified in
this case. @var{base_image} will never be modified unless you use the
@code{commit} monitor command.
+The size can also be specified using the @var{size} option with @code{-o},
+it doesn't need to be specified separately in this case.
+
@item commit [-f @var{fmt}] @var{filename}
Commit the changes recorded in @var{filename} in its base image.
-@item convert [-c] [-e] [-f @var{fmt}] @var{filename} [-O @var{output_fmt}] @var{output_filename}
+@item convert [-c] [-f @var{fmt}] [-O @var{output_fmt}] [-o @var{options}] [-B @var{output_base_image}] @var{filename} [@var{filename2} [...]] @var{output_filename}
Convert the disk image @var{filename} to disk image @var{output_filename}
-using format @var{output_fmt}. It can be optionally encrypted
-(@code{-e} option) or compressed (@code{-c} option).
+using format @var{output_fmt}. It can be optionally compressed (@code{-c}
+option) or use any format specific options like encryption (@code{-o} option).
-Only the format @code{qcow} supports encryption or compression. The
+Only the formats @code{qcow} and @code{qcow2} support encryption or compression. The
compression is read-only. It means that if a compressed sector is
rewritten, then it is rewritten as uncompressed data.
--
1.6.0.6
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH 0/2] Document qemu-img create -o
2009-06-04 13:39 [Qemu-devel] [PATCH 0/2] Document qemu-img create -o Kevin Wolf
2009-06-04 13:39 ` [Qemu-devel] [PATCH 1/2] qemu-img: Print available options with -o ? Kevin Wolf
2009-06-04 13:39 ` [Qemu-devel] [PATCH 2/2] Document changes in qemu-img interface Kevin Wolf
@ 2009-06-06 15:45 ` Blue Swirl
2 siblings, 0 replies; 4+ messages in thread
From: Blue Swirl @ 2009-06-06 15:45 UTC (permalink / raw)
To: Kevin Wolf; +Cc: qemu-devel
On 6/4/09, Kevin Wolf <kwolf@redhat.com> wrote:
> The bad habit of implementing things and no letting anybody know what has
> hanged... This patch series makes the qemu-img -o option actually usable
> without reading the code by documenting things.
Thanks, applied.
With hxtool the documentation and code could be kept in one place...
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2009-06-06 15:45 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-06-04 13:39 [Qemu-devel] [PATCH 0/2] Document qemu-img create -o Kevin Wolf
2009-06-04 13:39 ` [Qemu-devel] [PATCH 1/2] qemu-img: Print available options with -o ? Kevin Wolf
2009-06-04 13:39 ` [Qemu-devel] [PATCH 2/2] Document changes in qemu-img interface Kevin Wolf
2009-06-06 15:45 ` [Qemu-devel] [PATCH 0/2] Document qemu-img create -o Blue Swirl
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).