All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v2 0/3] qemu-img: improve qemu-img getopt error messages
@ 2017-03-17 10:45 Stefan Hajnoczi
  2017-03-17 10:45 ` [Qemu-devel] [PATCH v2 1/3] qemu-img: show help for invalid global options Stefan Hajnoczi
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Stefan Hajnoczi @ 2017-03-17 10:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: qemu-block, Kevin Wolf, mreitz, Stefan Hajnoczi

v2:
 * Print short help to avoid obscuring error messages [Max]

This series improves getopt error messages.  Unrecognized global options were
skipped rather than causing qemu-img to exit as expected.  Also avoid printing
the full help text because it obscures the actual error message.

Stefan Hajnoczi (3):
  qemu-img: show help for invalid global options
  qemu-img: fix switch indentation in img_amend()
  qemu-img: print short help on getopt failure

 qemu-img.c | 196 ++++++++++++++++++++++++++++++++++++++++++-------------------
 1 file changed, 137 insertions(+), 59 deletions(-)

-- 
2.9.3

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH v2 1/3] qemu-img: show help for invalid global options
  2017-03-17 10:45 [Qemu-devel] [PATCH v2 0/3] qemu-img: improve qemu-img getopt error messages Stefan Hajnoczi
@ 2017-03-17 10:45 ` Stefan Hajnoczi
  2017-03-17 10:45 ` [Qemu-devel] [PATCH v2 2/3] qemu-img: fix switch indentation in img_amend() Stefan Hajnoczi
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 9+ messages in thread
From: Stefan Hajnoczi @ 2017-03-17 10:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: qemu-block, Kevin Wolf, mreitz, Stefan Hajnoczi

The qemu-img sub-command executes regardless of invalid global options:

  $ qemu-img --foo info test.img
  qemu-img: unrecognized option '--foo'
  image: test.img
  ...

The unrecognized option warning may be missed by the user.  This can
hide incorrect command-lines in scripts and confuse users.

This patch prints the help information and terminates instead of
executing the sub-command.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 qemu-img.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/qemu-img.c b/qemu-img.c
index 98b836b..ce293a4 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -4339,6 +4339,7 @@ int main(int argc, char **argv)
     while ((c = getopt_long(argc, argv, "+hVT:", long_options, NULL)) != -1) {
         switch (c) {
         case 'h':
+        case '?':
             help();
             return 0;
         case 'V':
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH v2 2/3] qemu-img: fix switch indentation in img_amend()
  2017-03-17 10:45 [Qemu-devel] [PATCH v2 0/3] qemu-img: improve qemu-img getopt error messages Stefan Hajnoczi
  2017-03-17 10:45 ` [Qemu-devel] [PATCH v2 1/3] qemu-img: show help for invalid global options Stefan Hajnoczi
@ 2017-03-17 10:45 ` Stefan Hajnoczi
  2017-03-17 13:23   ` Philippe Mathieu-Daudé
  2017-03-17 10:45 ` [Qemu-devel] [PATCH v2 3/3] qemu-img: print short help on getopt failure Stefan Hajnoczi
  2017-03-18  3:00 ` [Qemu-devel] [PATCH v2 0/3] qemu-img: improve qemu-img getopt error messages Max Reitz
  3 siblings, 1 reply; 9+ messages in thread
From: Stefan Hajnoczi @ 2017-03-17 10:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: qemu-block, Kevin Wolf, mreitz, Stefan Hajnoczi

QEMU coding style indents 'case' to the same level as the 'switch'
statement:

  switch (foo) {
  case 1:

Fix this coding style violation so checkpatch.pl doesn't complain about
the next patch.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 qemu-img.c | 82 +++++++++++++++++++++++++++++++-------------------------------
 1 file changed, 41 insertions(+), 41 deletions(-)

diff --git a/qemu-img.c b/qemu-img.c
index ce293a4..c7ffabb 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -3500,47 +3500,47 @@ static int img_amend(int argc, char **argv)
         }
 
         switch (c) {
-            case 'h':
-            case '?':
-                help();
-                break;
-            case 'o':
-                if (!is_valid_option_list(optarg)) {
-                    error_report("Invalid option list: %s", optarg);
-                    ret = -1;
-                    goto out_no_progress;
-                }
-                if (!options) {
-                    options = g_strdup(optarg);
-                } else {
-                    char *old_options = options;
-                    options = g_strdup_printf("%s,%s", options, optarg);
-                    g_free(old_options);
-                }
-                break;
-            case 'f':
-                fmt = optarg;
-                break;
-            case 't':
-                cache = optarg;
-                break;
-            case 'p':
-                progress = true;
-                break;
-            case 'q':
-                quiet = true;
-                break;
-            case OPTION_OBJECT:
-                opts = qemu_opts_parse_noisily(&qemu_object_opts,
-                                               optarg, true);
-                if (!opts) {
-                    ret = -1;
-                    goto out_no_progress;
-                }
-                break;
-            case OPTION_IMAGE_OPTS:
-                image_opts = true;
-                break;
+        case 'h':
+        case '?':
+            help();
+            break;
+        case 'o':
+            if (!is_valid_option_list(optarg)) {
+                error_report("Invalid option list: %s", optarg);
+                ret = -1;
+                goto out_no_progress;
+            }
+            if (!options) {
+                options = g_strdup(optarg);
+            } else {
+                char *old_options = options;
+                options = g_strdup_printf("%s,%s", options, optarg);
+                g_free(old_options);
+            }
+            break;
+        case 'f':
+            fmt = optarg;
+            break;
+        case 't':
+            cache = optarg;
+            break;
+        case 'p':
+            progress = true;
+            break;
+        case 'q':
+            quiet = true;
+            break;
+        case OPTION_OBJECT:
+            opts = qemu_opts_parse_noisily(&qemu_object_opts,
+                                           optarg, true);
+            if (!opts) {
+                ret = -1;
+                goto out_no_progress;
+            }
+            break;
+        case OPTION_IMAGE_OPTS:
+            image_opts = true;
+            break;
         }
     }
 
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH v2 3/3] qemu-img: print short help on getopt failure
  2017-03-17 10:45 [Qemu-devel] [PATCH v2 0/3] qemu-img: improve qemu-img getopt error messages Stefan Hajnoczi
  2017-03-17 10:45 ` [Qemu-devel] [PATCH v2 1/3] qemu-img: show help for invalid global options Stefan Hajnoczi
  2017-03-17 10:45 ` [Qemu-devel] [PATCH v2 2/3] qemu-img: fix switch indentation in img_amend() Stefan Hajnoczi
@ 2017-03-17 10:45 ` Stefan Hajnoczi
  2017-03-18  2:56   ` Max Reitz
  2017-03-21 22:15   ` [Qemu-devel] [Qemu-block] " Kashyap Chamarthy
  2017-03-18  3:00 ` [Qemu-devel] [PATCH v2 0/3] qemu-img: improve qemu-img getopt error messages Max Reitz
  3 siblings, 2 replies; 9+ messages in thread
From: Stefan Hajnoczi @ 2017-03-17 10:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: qemu-block, Kevin Wolf, mreitz, Stefan Hajnoczi

Printing the full help output obscures the error message for an invalid
command-line option or missing argument.

Before this patch:

  $ ./qemu-img --foo
  ...pages of output...

After this patch:

  $ ./qemu-img --foo
  qemu-img: unrecognized option '--foo'
  Try 'qemu-img --help' for more information

This patch adds the getopt ':' character so that it can distinguish
between missing arguments and unrecognized options.  This helps provide
more detailed error messages.

Suggested-by: Max Reitz <mreitz@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 qemu-img.c | 117 ++++++++++++++++++++++++++++++++++++++++++++++++++-----------
 1 file changed, 97 insertions(+), 20 deletions(-)

diff --git a/qemu-img.c b/qemu-img.c
index c7ffabb..b220cf7 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -88,6 +88,16 @@ static void QEMU_NORETURN GCC_FMT_ATTR(1, 2) error_exit(const char *fmt, ...)
     exit(EXIT_FAILURE);
 }
 
+static void QEMU_NORETURN missing_argument(const char *option)
+{
+    error_exit("missing argument for option '%s'", option);
+}
+
+static void QEMU_NORETURN unrecognized_option(const char *option)
+{
+    error_exit("unrecognized option '%s'", option);
+}
+
 /* Please keep in synch with qemu-img.texi */
 static void QEMU_NORETURN help(void)
 {
@@ -406,13 +416,18 @@ static int img_create(int argc, char **argv)
             {"object", required_argument, 0, OPTION_OBJECT},
             {0, 0, 0, 0}
         };
-        c = getopt_long(argc, argv, "F:b:f:he6o:q",
+        c = getopt_long(argc, argv, ":F:b:f:he6o:q",
                         long_options, NULL);
         if (c == -1) {
             break;
         }
         switch(c) {
+        case ':':
+            missing_argument(argv[optind - 1]);
+            break;
         case '?':
+            unrecognized_option(argv[optind - 1]);
+            break;
         case 'h':
             help();
             break;
@@ -651,13 +666,18 @@ static int img_check(int argc, char **argv)
             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
             {0, 0, 0, 0}
         };
-        c = getopt_long(argc, argv, "hf:r:T:q",
+        c = getopt_long(argc, argv, ":hf:r:T:q",
                         long_options, &option_index);
         if (c == -1) {
             break;
         }
         switch(c) {
+        case ':':
+            missing_argument(argv[optind - 1]);
+            break;
         case '?':
+            unrecognized_option(argv[optind - 1]);
+            break;
         case 'h':
             help();
             break;
@@ -855,13 +875,18 @@ static int img_commit(int argc, char **argv)
             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
             {0, 0, 0, 0}
         };
-        c = getopt_long(argc, argv, "f:ht:b:dpq",
+        c = getopt_long(argc, argv, ":f:ht:b:dpq",
                         long_options, NULL);
         if (c == -1) {
             break;
         }
         switch(c) {
+        case ':':
+            missing_argument(argv[optind - 1]);
+            break;
         case '?':
+            unrecognized_option(argv[optind - 1]);
+            break;
         case 'h':
             help();
             break;
@@ -1190,13 +1215,18 @@ static int img_compare(int argc, char **argv)
             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
             {0, 0, 0, 0}
         };
-        c = getopt_long(argc, argv, "hf:F:T:pqs",
+        c = getopt_long(argc, argv, ":hf:F:T:pqs",
                         long_options, NULL);
         if (c == -1) {
             break;
         }
         switch (c) {
+        case ':':
+            missing_argument(argv[optind - 1]);
+            break;
         case '?':
+            unrecognized_option(argv[optind - 1]);
+            break;
         case 'h':
             help();
             break;
@@ -1926,13 +1956,18 @@ static int img_convert(int argc, char **argv)
             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
             {0, 0, 0, 0}
         };
-        c = getopt_long(argc, argv, "hf:O:B:ce6o:s:l:S:pt:T:qnm:W",
+        c = getopt_long(argc, argv, ":hf:O:B:ce6o:s:l:S:pt:T:qnm:W",
                         long_options, NULL);
         if (c == -1) {
             break;
         }
         switch(c) {
+        case ':':
+            missing_argument(argv[optind - 1]);
+            break;
         case '?':
+            unrecognized_option(argv[optind - 1]);
+            break;
         case 'h':
             help();
             break;
@@ -2502,13 +2537,18 @@ static int img_info(int argc, char **argv)
             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
             {0, 0, 0, 0}
         };
-        c = getopt_long(argc, argv, "f:h",
+        c = getopt_long(argc, argv, ":f:h",
                         long_options, &option_index);
         if (c == -1) {
             break;
         }
         switch(c) {
+        case ':':
+            missing_argument(argv[optind - 1]);
+            break;
         case '?':
+            unrecognized_option(argv[optind - 1]);
+            break;
         case 'h':
             help();
             break;
@@ -2713,13 +2753,18 @@ static int img_map(int argc, char **argv)
             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
             {0, 0, 0, 0}
         };
-        c = getopt_long(argc, argv, "f:h",
+        c = getopt_long(argc, argv, ":f:h",
                         long_options, &option_index);
         if (c == -1) {
             break;
         }
         switch (c) {
+        case ':':
+            missing_argument(argv[optind - 1]);
+            break;
         case '?':
+            unrecognized_option(argv[optind - 1]);
+            break;
         case 'h':
             help();
             break;
@@ -2835,13 +2880,18 @@ static int img_snapshot(int argc, char **argv)
             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
             {0, 0, 0, 0}
         };
-        c = getopt_long(argc, argv, "la:c:d:hq",
+        c = getopt_long(argc, argv, ":la:c:d:hq",
                         long_options, NULL);
         if (c == -1) {
             break;
         }
         switch(c) {
+        case ':':
+            missing_argument(argv[optind - 1]);
+            break;
         case '?':
+            unrecognized_option(argv[optind - 1]);
+            break;
         case 'h':
             help();
             return 0;
@@ -2988,13 +3038,18 @@ static int img_rebase(int argc, char **argv)
             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
             {0, 0, 0, 0}
         };
-        c = getopt_long(argc, argv, "hf:F:b:upt:T:q",
+        c = getopt_long(argc, argv, ":hf:F:b:upt:T:q",
                         long_options, NULL);
         if (c == -1) {
             break;
         }
         switch(c) {
+        case ':':
+            missing_argument(argv[optind - 1]);
+            break;
         case '?':
+            unrecognized_option(argv[optind - 1]);
+            break;
         case 'h':
             help();
             return 0;
@@ -3355,13 +3410,18 @@ static int img_resize(int argc, char **argv)
             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
             {0, 0, 0, 0}
         };
-        c = getopt_long(argc, argv, "f:hq",
+        c = getopt_long(argc, argv, ":f:hq",
                         long_options, NULL);
         if (c == -1) {
             break;
         }
         switch(c) {
+        case ':':
+            missing_argument(argv[optind - 1]);
+            break;
         case '?':
+            unrecognized_option(argv[optind - 1]);
+            break;
         case 'h':
             help();
             break;
@@ -3493,15 +3553,20 @@ static int img_amend(int argc, char **argv)
             {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS},
             {0, 0, 0, 0}
         };
-        c = getopt_long(argc, argv, "ho:f:t:pq",
+        c = getopt_long(argc, argv, ":ho:f:t:pq",
                         long_options, NULL);
         if (c == -1) {
             break;
         }
 
         switch (c) {
-        case 'h':
+        case ':':
+            missing_argument(argv[optind - 1]);
+            break;
         case '?':
+            unrecognized_option(argv[optind - 1]);
+            break;
+        case 'h':
             help();
             break;
         case 'o':
@@ -3759,14 +3824,19 @@ static int img_bench(int argc, char **argv)
             {"no-drain", no_argument, 0, OPTION_NO_DRAIN},
             {0, 0, 0, 0}
         };
-        c = getopt_long(argc, argv, "hc:d:f:no:qs:S:t:w", long_options, NULL);
+        c = getopt_long(argc, argv, ":hc:d:f:no:qs:S:t:w", long_options, NULL);
         if (c == -1) {
             break;
         }
 
         switch (c) {
-        case 'h':
+        case ':':
+            missing_argument(argv[optind - 1]);
+            break;
         case '?':
+            unrecognized_option(argv[optind - 1]);
+            break;
+        case 'h':
             help();
             break;
         case 'c':
@@ -4093,7 +4163,7 @@ static int img_dd(int argc, char **argv)
         { 0, 0, 0, 0 }
     };
 
-    while ((c = getopt_long(argc, argv, "hf:O:", long_options, NULL))) {
+    while ((c = getopt_long(argc, argv, ":hf:O:", long_options, NULL))) {
         if (c == EOF) {
             break;
         }
@@ -4104,10 +4174,12 @@ static int img_dd(int argc, char **argv)
         case 'f':
             fmt = optarg;
             break;
+        case ':':
+            missing_argument(argv[optind - 1]);
+            break;
         case '?':
-            error_report("Try 'qemu-img --help' for more information.");
-            ret = -1;
-            goto out;
+            unrecognized_option(argv[optind - 1]);
+            break;
         case 'h':
             help();
             break;
@@ -4336,10 +4408,15 @@ int main(int argc, char **argv)
     qemu_add_opts(&qemu_source_opts);
     qemu_add_opts(&qemu_trace_opts);
 
-    while ((c = getopt_long(argc, argv, "+hVT:", long_options, NULL)) != -1) {
+    while ((c = getopt_long(argc, argv, "+:hVT:", long_options, NULL)) != -1) {
         switch (c) {
-        case 'h':
+        case ':':
+            missing_argument(argv[optind - 1]);
+            return 0;
         case '?':
+            unrecognized_option(argv[optind - 1]);
+            return 0;
+        case 'h':
             help();
             return 0;
         case 'V':
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH v2 2/3] qemu-img: fix switch indentation in img_amend()
  2017-03-17 10:45 ` [Qemu-devel] [PATCH v2 2/3] qemu-img: fix switch indentation in img_amend() Stefan Hajnoczi
@ 2017-03-17 13:23   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 9+ messages in thread
From: Philippe Mathieu-Daudé @ 2017-03-17 13:23 UTC (permalink / raw)
  To: Stefan Hajnoczi, qemu-devel; +Cc: Kevin Wolf, qemu-block, mreitz

On 03/17/2017 07:45 AM, Stefan Hajnoczi wrote:
> QEMU coding style indents 'case' to the same level as the 'switch'
> statement:
>
>   switch (foo) {
>   case 1:
>
> Fix this coding style violation so checkpatch.pl doesn't complain about
> the next patch.
>
> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

> ---
>  qemu-img.c | 82 +++++++++++++++++++++++++++++++-------------------------------
>  1 file changed, 41 insertions(+), 41 deletions(-)
>
> diff --git a/qemu-img.c b/qemu-img.c
> index ce293a4..c7ffabb 100644
> --- a/qemu-img.c
> +++ b/qemu-img.c
> @@ -3500,47 +3500,47 @@ static int img_amend(int argc, char **argv)
>          }
>
>          switch (c) {
> -            case 'h':
> -            case '?':
> -                help();
> -                break;
> -            case 'o':
> -                if (!is_valid_option_list(optarg)) {
> -                    error_report("Invalid option list: %s", optarg);
> -                    ret = -1;
> -                    goto out_no_progress;
> -                }
> -                if (!options) {
> -                    options = g_strdup(optarg);
> -                } else {
> -                    char *old_options = options;
> -                    options = g_strdup_printf("%s,%s", options, optarg);
> -                    g_free(old_options);
> -                }
> -                break;
> -            case 'f':
> -                fmt = optarg;
> -                break;
> -            case 't':
> -                cache = optarg;
> -                break;
> -            case 'p':
> -                progress = true;
> -                break;
> -            case 'q':
> -                quiet = true;
> -                break;
> -            case OPTION_OBJECT:
> -                opts = qemu_opts_parse_noisily(&qemu_object_opts,
> -                                               optarg, true);
> -                if (!opts) {
> -                    ret = -1;
> -                    goto out_no_progress;
> -                }
> -                break;
> -            case OPTION_IMAGE_OPTS:
> -                image_opts = true;
> -                break;
> +        case 'h':
> +        case '?':
> +            help();
> +            break;
> +        case 'o':
> +            if (!is_valid_option_list(optarg)) {
> +                error_report("Invalid option list: %s", optarg);
> +                ret = -1;
> +                goto out_no_progress;
> +            }
> +            if (!options) {
> +                options = g_strdup(optarg);
> +            } else {
> +                char *old_options = options;
> +                options = g_strdup_printf("%s,%s", options, optarg);
> +                g_free(old_options);
> +            }
> +            break;
> +        case 'f':
> +            fmt = optarg;
> +            break;
> +        case 't':
> +            cache = optarg;
> +            break;
> +        case 'p':
> +            progress = true;
> +            break;
> +        case 'q':
> +            quiet = true;
> +            break;
> +        case OPTION_OBJECT:
> +            opts = qemu_opts_parse_noisily(&qemu_object_opts,
> +                                           optarg, true);
> +            if (!opts) {
> +                ret = -1;
> +                goto out_no_progress;
> +            }
> +            break;
> +        case OPTION_IMAGE_OPTS:
> +            image_opts = true;
> +            break;
>          }
>      }
>
>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH v2 3/3] qemu-img: print short help on getopt failure
  2017-03-17 10:45 ` [Qemu-devel] [PATCH v2 3/3] qemu-img: print short help on getopt failure Stefan Hajnoczi
@ 2017-03-18  2:56   ` Max Reitz
  2017-03-21 22:15   ` [Qemu-devel] [Qemu-block] " Kashyap Chamarthy
  1 sibling, 0 replies; 9+ messages in thread
From: Max Reitz @ 2017-03-18  2:56 UTC (permalink / raw)
  To: Stefan Hajnoczi, qemu-devel; +Cc: qemu-block, Kevin Wolf

[-- Attachment #1: Type: text/plain, Size: 966 bytes --]

On 17.03.2017 11:45, Stefan Hajnoczi wrote:
> Printing the full help output obscures the error message for an invalid
> command-line option or missing argument.
> 
> Before this patch:
> 
>   $ ./qemu-img --foo
>   ...pages of output...
> 
> After this patch:
> 
>   $ ./qemu-img --foo
>   qemu-img: unrecognized option '--foo'
>   Try 'qemu-img --help' for more information
> 
> This patch adds the getopt ':' character so that it can distinguish
> between missing arguments and unrecognized options.  This helps provide
> more detailed error messages.
> 
> Suggested-by: Max Reitz <mreitz@redhat.com>
> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> ---
>  qemu-img.c | 117 ++++++++++++++++++++++++++++++++++++++++++++++++++-----------
>  1 file changed, 97 insertions(+), 20 deletions(-)

Uh, right, this was pretty much pre-existing. Then even more so thanks
for this patch. :-)

Reviewed-by: Max Reitz <mreitz@redhat.com>


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 512 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH v2 0/3] qemu-img: improve qemu-img getopt error messages
  2017-03-17 10:45 [Qemu-devel] [PATCH v2 0/3] qemu-img: improve qemu-img getopt error messages Stefan Hajnoczi
                   ` (2 preceding siblings ...)
  2017-03-17 10:45 ` [Qemu-devel] [PATCH v2 3/3] qemu-img: print short help on getopt failure Stefan Hajnoczi
@ 2017-03-18  3:00 ` Max Reitz
  3 siblings, 0 replies; 9+ messages in thread
From: Max Reitz @ 2017-03-18  3:00 UTC (permalink / raw)
  To: Stefan Hajnoczi, qemu-devel; +Cc: qemu-block, Kevin Wolf

[-- Attachment #1: Type: text/plain, Size: 836 bytes --]

On 17.03.2017 11:45, Stefan Hajnoczi wrote:
> v2:
>  * Print short help to avoid obscuring error messages [Max]
> 
> This series improves getopt error messages.  Unrecognized global options were
> skipped rather than causing qemu-img to exit as expected.  Also avoid printing
> the full help text because it obscures the actual error message.
> 
> Stefan Hajnoczi (3):
>   qemu-img: show help for invalid global options
>   qemu-img: fix switch indentation in img_amend()
>   qemu-img: print short help on getopt failure
> 
>  qemu-img.c | 196 ++++++++++++++++++++++++++++++++++++++++++-------------------
>  1 file changed, 137 insertions(+), 59 deletions(-)

Thanks, applied to my block branch:

https://github.com/XanClic/qemu/commits/block

(Assuming that patches 2 and 3 will be fine even for rc2...)

Max


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 512 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [Qemu-block] [PATCH v2 3/3] qemu-img: print short help on getopt failure
  2017-03-17 10:45 ` [Qemu-devel] [PATCH v2 3/3] qemu-img: print short help on getopt failure Stefan Hajnoczi
  2017-03-18  2:56   ` Max Reitz
@ 2017-03-21 22:15   ` Kashyap Chamarthy
  2017-03-22 14:12     ` Max Reitz
  1 sibling, 1 reply; 9+ messages in thread
From: Kashyap Chamarthy @ 2017-03-21 22:15 UTC (permalink / raw)
  To: Stefan Hajnoczi; +Cc: qemu-devel, Kevin Wolf, qemu-block, mreitz

On Fri, Mar 17, 2017 at 06:45:41PM +0800, Stefan Hajnoczi wrote:
> Printing the full help output obscures the error message for an invalid
> command-line option or missing argument.
> 
> Before this patch:
> 
>   $ ./qemu-img --foo
>   ...pages of output...

That gives me:

    $ qemu-img --foo
    qemu-img: unrecognized option '--foo'

I think you meant any one of the `qemu-img create|convert|... --foo`:

    $ qemu-img create --foo
    [...]

Which _does_ give "pages of output".

Just noting if you want to tweak the commit message.

> After this patch:
> 
>   $ ./qemu-img --foo
>   qemu-img: unrecognized option '--foo'
>   Try 'qemu-img --help' for more information
> 

[...]

-- 
/kashyap

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [Qemu-block] [PATCH v2 3/3] qemu-img: print short help on getopt failure
  2017-03-21 22:15   ` [Qemu-devel] [Qemu-block] " Kashyap Chamarthy
@ 2017-03-22 14:12     ` Max Reitz
  0 siblings, 0 replies; 9+ messages in thread
From: Max Reitz @ 2017-03-22 14:12 UTC (permalink / raw)
  To: Kashyap Chamarthy, Stefan Hajnoczi; +Cc: qemu-devel, Kevin Wolf, qemu-block

[-- Attachment #1: Type: text/plain, Size: 932 bytes --]

On 21.03.2017 23:15, Kashyap Chamarthy wrote:
> On Fri, Mar 17, 2017 at 06:45:41PM +0800, Stefan Hajnoczi wrote:
>> Printing the full help output obscures the error message for an invalid
>> command-line option or missing argument.
>>
>> Before this patch:
>>
>>   $ ./qemu-img --foo
>>   ...pages of output...
> 
> That gives me:
> 
>     $ qemu-img --foo
>     qemu-img: unrecognized option '--foo'

Yes, before this series. But not before this patch (i.e. after the first
two patches of this series).

Max

> 
> I think you meant any one of the `qemu-img create|convert|... --foo`:
> 
>     $ qemu-img create --foo
>     [...]
> 
> Which _does_ give "pages of output".
> 
> Just noting if you want to tweak the commit message.
> 
>> After this patch:
>>
>>   $ ./qemu-img --foo
>>   qemu-img: unrecognized option '--foo'
>>   Try 'qemu-img --help' for more information
>>
> 
> [...]
> 



[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 512 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2017-03-22 14:13 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-17 10:45 [Qemu-devel] [PATCH v2 0/3] qemu-img: improve qemu-img getopt error messages Stefan Hajnoczi
2017-03-17 10:45 ` [Qemu-devel] [PATCH v2 1/3] qemu-img: show help for invalid global options Stefan Hajnoczi
2017-03-17 10:45 ` [Qemu-devel] [PATCH v2 2/3] qemu-img: fix switch indentation in img_amend() Stefan Hajnoczi
2017-03-17 13:23   ` Philippe Mathieu-Daudé
2017-03-17 10:45 ` [Qemu-devel] [PATCH v2 3/3] qemu-img: print short help on getopt failure Stefan Hajnoczi
2017-03-18  2:56   ` Max Reitz
2017-03-21 22:15   ` [Qemu-devel] [Qemu-block] " Kashyap Chamarthy
2017-03-22 14:12     ` Max Reitz
2017-03-18  3:00 ` [Qemu-devel] [PATCH v2 0/3] qemu-img: improve qemu-img getopt error messages Max Reitz

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.