From cbf8a0d9641869de104ad1c94493e07addcd45c9 Mon Sep 17 00:00:00 2001 From: Gowtham Munukutla Date: Tue, 23 Feb 2021 20:12:26 +0530 Subject: [PATCH 1/4] Accept only one argument when deleting a gist --- pkg/cmd/gist/delete/delete.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/cmd/gist/delete/delete.go b/pkg/cmd/gist/delete/delete.go index 54f745030..add7e3335 100644 --- a/pkg/cmd/gist/delete/delete.go +++ b/pkg/cmd/gist/delete/delete.go @@ -29,7 +29,7 @@ func NewCmdDelete(f *cmdutil.Factory, runF func(*DeleteOptions) error) *cobra.Co cmd := &cobra.Command{ Use: "delete { | }", Short: "Delete a gist", - Args: cmdutil.MinimumArgs(1, "cannot delete: gist argument required"), + Args: cobra.ExactArgs(1), RunE: func(c *cobra.Command, args []string) error { opts.Selector = args[0] if runF != nil { From 56ead91702e61575622233713ccf247af4644bcb Mon Sep 17 00:00:00 2001 From: Gowtham Munukutla Date: Wed, 24 Feb 2021 15:49:40 +0530 Subject: [PATCH 2/4] Add helper function to validate exact args in cmdutil --- pkg/cmd/gist/edit/edit.go | 2 +- pkg/cmd/gist/view/view.go | 2 +- pkg/cmd/pr/checkout/checkout.go | 2 +- pkg/cmdutil/args.go | 18 ++++++++++++++++++ 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/pkg/cmd/gist/edit/edit.go b/pkg/cmd/gist/edit/edit.go index 7cba14800..a8fa4d683 100644 --- a/pkg/cmd/gist/edit/edit.go +++ b/pkg/cmd/gist/edit/edit.go @@ -49,7 +49,7 @@ func NewCmdEdit(f *cmdutil.Factory, runF func(*EditOptions) error) *cobra.Comman cmd := &cobra.Command{ Use: "edit { | }", Short: "Edit one of your gists", - Args: cmdutil.MinimumArgs(1, "cannot edit: gist argument required"), + Args: cmdutil.ExactArgs(1, "cannot edit: gist argument required"), RunE: func(c *cobra.Command, args []string) error { opts.Selector = args[0] diff --git a/pkg/cmd/gist/view/view.go b/pkg/cmd/gist/view/view.go index 70bb0a238..e1e9408cf 100644 --- a/pkg/cmd/gist/view/view.go +++ b/pkg/cmd/gist/view/view.go @@ -35,7 +35,7 @@ func NewCmdView(f *cmdutil.Factory, runF func(*ViewOptions) error) *cobra.Comman cmd := &cobra.Command{ Use: "view { | }", Short: "View a gist", - Args: cmdutil.MinimumArgs(1, "cannot view: gist argument required"), + Args: cmdutil.ExactArgs(1, "cannot view: gist argument required"), RunE: func(cmd *cobra.Command, args []string) error { opts.Selector = args[0] diff --git a/pkg/cmd/pr/checkout/checkout.go b/pkg/cmd/pr/checkout/checkout.go index d2cd84304..f7f73bb28 100644 --- a/pkg/cmd/pr/checkout/checkout.go +++ b/pkg/cmd/pr/checkout/checkout.go @@ -46,7 +46,7 @@ func NewCmdCheckout(f *cmdutil.Factory, runF func(*CheckoutOptions) error) *cobr cmd := &cobra.Command{ Use: "checkout { | | }", Short: "Check out a pull request in git", - Args: cmdutil.MinimumArgs(1, "argument required"), + Args: cmdutil.ExactArgs(1, "argument required"), RunE: func(cmd *cobra.Command, args []string) error { // support `-R, --repo` override opts.BaseRepo = f.BaseRepo diff --git a/pkg/cmdutil/args.go b/pkg/cmdutil/args.go index 65f3ade51..d58757c20 100644 --- a/pkg/cmdutil/args.go +++ b/pkg/cmdutil/args.go @@ -21,6 +21,24 @@ func MinimumArgs(n int, msg string) cobra.PositionalArgs { } } +func ExactArgs(n int, msg string) cobra.PositionalArgs { + if msg == "" { + return cobra.MinimumNArgs(1) + } + + return func(cmd *cobra.Command, args []string) error { + if len(args) > n { + return &FlagError{Err: errors.New("too many arguments")} + } + + if len(args) < n { + return &FlagError{Err: errors.New("not enough arguments")} + } + + return nil + } +} + func NoArgsQuoteReminder(cmd *cobra.Command, args []string) error { if len(args) < 1 { return nil From 61eb7eeeab3f346ff7a4c61a79d5b0341cc71cff Mon Sep 17 00:00:00 2001 From: Gowtham Munukutla Date: Wed, 24 Feb 2021 15:53:07 +0530 Subject: [PATCH 3/4] Add msg in gist delete --- pkg/cmd/gist/delete/delete.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/cmd/gist/delete/delete.go b/pkg/cmd/gist/delete/delete.go index add7e3335..674c33ad6 100644 --- a/pkg/cmd/gist/delete/delete.go +++ b/pkg/cmd/gist/delete/delete.go @@ -29,7 +29,7 @@ func NewCmdDelete(f *cmdutil.Factory, runF func(*DeleteOptions) error) *cobra.Co cmd := &cobra.Command{ Use: "delete { | }", Short: "Delete a gist", - Args: cobra.ExactArgs(1), + Args: cmdutil.ExactArgs(1, "cannot delete: gist argument required"), RunE: func(c *cobra.Command, args []string) error { opts.Selector = args[0] if runF != nil { From 66d4307bce0d0189c1cb4650b432852cde39f328 Mon Sep 17 00:00:00 2001 From: Gowtham Munukutla Date: Wed, 24 Feb 2021 18:05:11 +0530 Subject: [PATCH 4/4] return msg instead of too many arguments --- pkg/cmdutil/args.go | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/pkg/cmdutil/args.go b/pkg/cmdutil/args.go index d58757c20..ee9c5e350 100644 --- a/pkg/cmdutil/args.go +++ b/pkg/cmdutil/args.go @@ -22,9 +22,6 @@ func MinimumArgs(n int, msg string) cobra.PositionalArgs { } func ExactArgs(n int, msg string) cobra.PositionalArgs { - if msg == "" { - return cobra.MinimumNArgs(1) - } return func(cmd *cobra.Command, args []string) error { if len(args) > n { @@ -32,7 +29,7 @@ func ExactArgs(n int, msg string) cobra.PositionalArgs { } if len(args) < n { - return &FlagError{Err: errors.New("not enough arguments")} + return &FlagError{Err: errors.New(msg)} } return nil