-
Notifications
You must be signed in to change notification settings - Fork 1.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
cli: FlagErrorFunc: don't print long usage output for invalid flags #5233
Conversation
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #5233 +/- ##
==========================================
- Coverage 61.44% 61.44% -0.01%
==========================================
Files 298 298
Lines 20824 20821 -3
==========================================
- Hits 12796 12794 -2
+ Misses 7113 7112 -1
Partials 915 915 |
86cabc6
to
d6a2a4e
Compare
7c4d8aa
to
5f0f0dd
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
overall lgtm, check the comments
cli/cobra.go
Outdated
return StatusError{ | ||
Status: fmt.Sprintf("%s\nSee '%s --help'.%s", err, cmd.CommandPath(), usage), | ||
Status: fmt.Sprintf("%[2]s\n\nUsage: %[3]s\n\nRun '%[4]s --help' for more information", cmd.Root().Name(), err, cmd.UseLine(), cmd.CommandPath()), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: there are 2 spaces after Usage:
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also, is cmd.Root().Name()
being used?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: there are 2 spaces after
Usage:
Yes, it looked like we're using 2 spaces for that everywhere; ISTR those may have been a <tab>
in the past, which screwed up generating our YAML-docs, and were replaced; we should make a pass at checking where all of those are produced, and consider changing to a single one 🙈
docker --nosuch 2>&1 >/dev/null | grep Usage
Usage: docker [OPTIONS] COMMAND
Also, is
cmd.Root().Name()
being used?
Oh! Good one; I don't think it is anymore! I went through a couple of iterations; one of them was including docker:
as prefix, but I went back-and-forth on whether that made things clearer, as it would look like (e.g.);
docker: Usage: docker [OPTIONS] COMMAND
Which felt just too verbose and somewhat confusing, so in the end I removed that.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OH, i didn't realize we double-space in multiple areas 🙈 no problem!
When trying to use an invalid flag, the CLI currently prints the a short error message, instructions to use the `--help` flag to learn about the correct usage, followed by the command's usage output. While this is a common convention, and may have been a nice gesture when docker was still young and only had a few commands and options ("you did something wrong, but here's an overview of what you can use"), that's no longer the case, and many commands have a _very_ long output. The result of this is that the error message, which is the relevant information in this case - "You mis-typed something" - is lost in the output, and hard to find (sometimes even requiring scrolling back). The output is also confusing, because it _looks_ like something ran successfully (most of the output is not about the error!). Even further; the suggested resolution (try `--help` to see the correct options) is rather redundant, because running teh command with `--help` produces _exactly_ the same output as was just showh, baring the error message. As a fun fact, due to the usage output being printed, the output even contains not one, but _two_ "call to actions"; - `See 'docker volume --help'.` (under the erro message) - `Run 'docker volume COMMAND --help' for more information on a command.` (under the usage output) In short; the output is too verbose, confusing, and doesn't provide a good UX. Let's reduce the output produced so that the focus is on the important information. This patch: - Changes the usage to the short-usage. - Prefixes the error message with the binary / root-command name (usually `docker:`) to be consistent with `unknon command`, and helps to distinguish where the message originated from (the `docker` CLI in this case). - Adds an empty line between the error-message and the "call to action" (`Run 'docker volume --help' ...` in the example below). This helps separating the error message ("unkown flag") from the call-to-action. Before this patch: docker volume --no-such-flag unknown flag: --no-such-flag See 'docker volume --help'. Usage: docker volume COMMAND Manage volumes Commands: create Create a volume inspect Display detailed information on one or more volumes ls List volumes prune Remove unused local volumes rm Remove one or more volumes update Update a volume (cluster volumes only) Run 'docker volume COMMAND --help' for more information on a command. With this patch: docker volume --no-such-flag docker: unknown flag: --no-such-flag Usage: docker volume COMMAND Run 'docker volume --help' for more information Signed-off-by: Sebastiaan van Stijn <[email protected]>
Updated; ptal 👍 |
cli: FlagErrorFunc: don't print usage output for invalid flags
When trying to use an invalid flag, the CLI currently prints the a short
error message, instructions to use the
--help
flag to learn about thecorrect usage, followed by the command's usage output.
While this is a common convention, and may have been a nice gesture when
docker was still young and only had a few commands and options ("you did
something wrong, but here's an overview of what you can use"), that's no
longer the case, and many commands have a very long output.
The result of this is that the error message, which is the relevant
information in this case - "You mis-typed something" - is lost in the
output, and hard to find (sometimes even requiring scrolling back).
The output is also confusing, because it looks like something ran
successfully (most of the output is not about the error!).
Even further; the suggested resolution (try
--help
to see the correctoptions) is rather redundant, because running teh command with
--help
produces exactly the same output as was just showh, baring the error
message. As a fun fact, due to the usage output being printed, the
output even contains not one, but two "call to actions";
See 'docker volume --help'.
(under the erro message)Run 'docker volume COMMAND --help' for more information on a command.
(under the usage output)
In short; the output is too verbose, confusing, and doesn't provide
a good UX. Let's reduce the output produced so that the focus is on the
important information.
This patch:
(usually
docker:
) to be consistent withunknon command
, and helpsto distinguish where the message originated from (the
docker
CLI inthis case).
(
Run 'docker volume --help' ...
in the example below). This helpsseparating the error message ("unkown flag") from the call-to-action.
Before this patch:
With this patch:
- Description for the changelog
- A picture of a cute animal (not mandatory but encouraged)