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
fix(cli): show help for subcommands #629
Conversation
Codecov Report
@@ Coverage Diff @@
## master #629 +/- ##
==========================================
- Coverage 54.64% 54.61% -0.03%
==========================================
Files 48 48
Lines 2306 2307 +1
==========================================
Hits 1260 1260
- Misses 913 914 +1
Partials 133 133
Continue to review full report at Codecov.
|
@@ -36,7 +37,8 @@ func NewArtifactConfig(c *cli.Context) ArtifactConfig { | |||
func (c *ArtifactConfig) Init(ctx *cli.Context, logger *zap.SugaredLogger) (err error) { | |||
if c.Input == "" && ctx.Args().Len() == 0 { | |||
logger.Debug(`trivy requires at least 1 argument or --input option`) | |||
cli.ShowAppHelpAndExit(ctx, 0) | |||
_ = cli.ShowSubcommandHelp(ctx) | |||
os.Exit(0) |
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.
Hmm – should this be a non-zero exit code if the usage was not correct? I'm actually not sure what's the de-facto way (if there's one).
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.
Some commands I looked into return 0. It no argument is passed, we show help for the subcommand and I think the usage is not incorrect.
$ docker image
Usage: docker image COMMAND
Manage images
Commands:
build Build an image from a Dockerfile
history Show the history of an image
import Import the contents from a tarball to create a filesystem image
inspect Display detailed information on one or more images
load Load an image from a tar archive or STDIN
ls List images
prune Remove unused images
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rm Remove one or more images
save Save one or more images to a tar archive (streamed to STDOUT by default)
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
Run 'docker image COMMAND --help' for more information on a command.
$ echo $?
0
If we pass an invalid command, it returns 1.
$ docker image foo
Usage: docker image COMMAND
Manage images
Commands:
build Build an image from a Dockerfile
history Show the history of an image
import Import the contents from a tarball to create a filesystem image
inspect Display detailed information on one or more images
load Load an image from a tar archive or STDIN
ls List images
prune Remove unused images
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rm Remove one or more images
save Save one or more images to a tar archive (streamed to STDOUT by default)
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
Run 'docker image COMMAND --help' for more information on a command.
$ echo $?
1
Trivy also returns 1 if an invalid parameter is passed.
$ trivy image foo bar
2020-09-08T19:32:49.789+0300 ERROR multiple targets cannot be specified
2020/09/08 19:32:49 failed to initialize options: arguments error
$ echo $?
1
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.
I guess it depends on the tool...
➜ ~ tar
tar: Must specify one of -c, -r, -t, -u, -x
➜ ~ echo $?
1
➜ ~ gzip
gzip: standard output is a terminal -- ignoring
➜ ~ echo $?
1
➜ ~ git
usage: git [--version] [--help] [-C <path>] [-c <name>=<value>]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]
[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
<command> [<args>]
These are common Git commands used in various situations:
start a working area (see also: git help tutorial)
clone Clone a repository into a new directory
init Create an empty Git repository or reinitialize an existing one
work on the current change (see also: git help everyday)
add Add file contents to the index
mv Move or rename a file, a directory, or a symlink
restore Restore working tree files
rm Remove files from the working tree and from the index
examine the history and state (see also: git help revisions)
bisect Use binary search to find the commit that introduced a bug
diff Show changes between commits, commit and working tree, etc
grep Print lines matching a pattern
log Show commit logs
show Show various types of objects
status Show the working tree status
grow, mark and tweak your common history
branch List, create, or delete branches
commit Record changes to the repository
merge Join two or more development histories together
rebase Reapply commits on top of another base tip
reset Reset current HEAD to the specified state
switch Switch branches
tag Create, list, delete or verify a tag object signed with GPG
collaborate (see also: git help workflows)
fetch Download objects and refs from another repository
pull Fetch from and integrate with another repository or a local branch
push Update remote refs along with associated objects
'git help -a' and 'git help -g' list available subcommands and some
concept guides. See 'git help <command>' or 'git help <concept>'
to read about a specific subcommand or concept.
See 'git help git' for an overview of the system.
➜ ~ echo $?
1
Either way I don't have a strong opinion, I was just curious to learn more 😄
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.
Yes, it depends on tools. I don't have any preference, so we can change the behavior whenever we want.
…#629) * fix: Single public IPs should ba acceptable as prefixes Signed-off-by: Owen Rumney <owen.rumney@aquasec.com> * fix: Ensure file closed before removing from FS Signed-off-by: Owen Rumney <owen.rumney@aquasec.com>
Change
Before
After
Note
We'll replace ShowSubcommandHelp and os.Exit with ShowSubcommandHelpAndExit if urfave/cli#1183 is merged.