From 095b5ce97c2029798f84f747c26502216ee4bbc8 Mon Sep 17 00:00:00 2001 From: Masahiro331 Date: Tue, 8 Sep 2020 23:32:20 +0900 Subject: [PATCH] fix(cli): show help when no argument is passed (#628) * Fix subcommands help * refactor: call ShowAppHelpAndExit * refactor: remove an unused error * test: remove exit cases Co-authored-by: knqyf263 --- internal/artifact/config/config.go | 3 +-- internal/artifact/config/config_test.go | 4 ---- internal/artifact/image.go | 6 +----- internal/client/config/config.go | 3 +-- internal/client/config/config_test.go | 4 ---- internal/config/artifact.go | 12 +++++------- internal/config/artifact_test.go | 9 +-------- 7 files changed, 9 insertions(+), 32 deletions(-) diff --git a/internal/artifact/config/config.go b/internal/artifact/config/config.go index c9e1f64cc9..0b1272aef4 100644 --- a/internal/artifact/config/config.go +++ b/internal/artifact/config/config.go @@ -57,8 +57,7 @@ func (c *Config) Init(image bool) error { return nil } - if err := c.ArtifactConfig.Init(c.Context.Args(), c.Logger); err != nil { - cli.ShowAppHelp(c.Context) + if err := c.ArtifactConfig.Init(c.Context, c.Logger); err != nil { return err } diff --git a/internal/artifact/config/config_test.go b/internal/artifact/config/config_test.go index 434ce73055..7eb07e2c0e 100644 --- a/internal/artifact/config/config_test.go +++ b/internal/artifact/config/config_test.go @@ -184,10 +184,6 @@ func TestConfig_Init(t *testing.T) { }, wantErr: "arguments error", }, - { - name: "sad: no image name", - wantErr: "no target is specified", - }, { name: "sad: invalid image name", args: []string{`!"#$%&'()`}, diff --git a/internal/artifact/image.go b/internal/artifact/image.go index a5cb9fd950..69c42c2538 100644 --- a/internal/artifact/image.go +++ b/internal/artifact/image.go @@ -9,7 +9,6 @@ import ( "github.com/aquasecurity/fanal/cache" "github.com/aquasecurity/trivy/internal/artifact/config" - artifact "github.com/aquasecurity/trivy/internal/config" "github.com/aquasecurity/trivy/pkg/scanner" ) @@ -38,10 +37,7 @@ func ImageRun(cliCtx *cli.Context) error { } // initialize config - err = c.Init(true) - if xerrors.Is(err, artifact.ErrNoTarget) { - return nil - } else if err != nil { + if err := c.Init(true); err != nil { return xerrors.Errorf("failed to initialize options: %w", err) } diff --git a/internal/client/config/config.go b/internal/client/config/config.go index 6a58e73ff1..023c6a4ce0 100644 --- a/internal/client/config/config.go +++ b/internal/client/config/config.go @@ -60,12 +60,11 @@ func (c *Config) Init() (err error) { return err } - if err := c.ArtifactConfig.Init(c.Context.Args(), c.Logger); err != nil { + if err := c.ArtifactConfig.Init(c.Context, c.Logger); err != nil { return err } if err := c.ImageConfig.Init(c.Context.Args(), c.Logger); err != nil { - cli.ShowAppHelp(c.Context) return err } diff --git a/internal/client/config/config_test.go b/internal/client/config/config_test.go index 2f600e9160..f4d0444e09 100644 --- a/internal/client/config/config_test.go +++ b/internal/client/config/config_test.go @@ -224,10 +224,6 @@ func TestConfig_Init(t *testing.T) { }, wantErr: "arguments error", }, - { - name: "sad: no image name", - wantErr: "no target is specified", - }, { name: "sad: invalid image name", args: []string{`!"#$%&'()`}, diff --git a/internal/config/artifact.go b/internal/config/artifact.go index 2ceda07c03..ac1935c11f 100644 --- a/internal/config/artifact.go +++ b/internal/config/artifact.go @@ -33,19 +33,17 @@ func NewArtifactConfig(c *cli.Context) ArtifactConfig { } } -var ErrNoTarget = xerrors.New("no target is specified") - -func (c *ArtifactConfig) Init(args cli.Args, logger *zap.SugaredLogger) (err error) { - if c.Input == "" && args.Len() == 0 { +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`) - return ErrNoTarget - } else if args.Len() > 1 { + cli.ShowAppHelpAndExit(ctx, 0) + } else if ctx.Args().Len() > 1 { logger.Error(`multiple targets cannot be specified`) return xerrors.New("arguments error") } if c.Input == "" { - c.Target = args.First() + c.Target = ctx.Args().First() } if c.skipDirectories != "" { diff --git a/internal/config/artifact_test.go b/internal/config/artifact_test.go index d9a4124284..95608b8dd9 100644 --- a/internal/config/artifact_test.go +++ b/internal/config/artifact_test.go @@ -35,13 +35,6 @@ func TestArtifactConfig_Init(t *testing.T) { }, wantErr: "arguments error", }, - { - name: "sad: no image name", - logs: []string{ - "trivy requires at least 1 argument or --input option", - }, - wantErr: "no target is specified", - }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { @@ -55,7 +48,7 @@ func TestArtifactConfig_Init(t *testing.T) { c := config.NewArtifactConfig(ctx) - err := c.Init(ctx.Args(), logger.Sugar()) + err := c.Init(ctx, logger.Sugar()) // tests log messages var gotMessages []string