From ca8d032824bab3908d0bdfc7d2ef083157327ac5 Mon Sep 17 00:00:00 2001 From: Shi Han NG Date: Sat, 1 Aug 2020 19:07:51 +0900 Subject: [PATCH 1/4] Add custom error for gh repo clone --- pkg/cmd/repo/clone/clone.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pkg/cmd/repo/clone/clone.go b/pkg/cmd/repo/clone/clone.go index 30209b0cc..76df65843 100644 --- a/pkg/cmd/repo/clone/clone.go +++ b/pkg/cmd/repo/clone/clone.go @@ -1,6 +1,7 @@ package clone import ( + "fmt" "net/http" "strings" @@ -12,6 +13,7 @@ import ( "github.com/cli/cli/pkg/cmdutil" "github.com/cli/cli/pkg/iostreams" "github.com/spf13/cobra" + "github.com/spf13/pflag" ) type CloneOptions struct { @@ -55,6 +57,13 @@ func NewCmdClone(f *cmdutil.Factory, runF func(*CloneOptions) error) *cobra.Comm }, } + cmd.SetFlagErrorFunc(func(cmd *cobra.Command, err error) error { + if err == pflag.ErrHelp { + return err + } + return &cmdutil.FlagError{Err: fmt.Errorf("%v\nSeparate git clone flags with `--`.", err)} + }) + return cmd } From 6e844fef871e3c94a16784d15253199e51e0fec6 Mon Sep 17 00:00:00 2001 From: Shi Han NG Date: Sat, 1 Aug 2020 19:09:29 +0900 Subject: [PATCH 2/4] Mention git clone flags in gh repo clone usage --- pkg/cmd/repo/clone/clone.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/cmd/repo/clone/clone.go b/pkg/cmd/repo/clone/clone.go index 76df65843..88988968d 100644 --- a/pkg/cmd/repo/clone/clone.go +++ b/pkg/cmd/repo/clone/clone.go @@ -34,7 +34,7 @@ func NewCmdClone(f *cmdutil.Factory, runF func(*CloneOptions) error) *cobra.Comm } cmd := &cobra.Command{ - Use: "clone []", + Use: "clone [] -- [...]", Args: cobra.MinimumNArgs(1), Short: "Clone a repository locally", Long: heredoc.Doc( From d24f33b679d8a0e789abe48772a37c8191326604 Mon Sep 17 00:00:00 2001 From: Shi Han NG Date: Sat, 1 Aug 2020 19:23:28 +0900 Subject: [PATCH 3/4] Add Test_RepoClone_flagError --- pkg/cmd/repo/clone/clone_test.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pkg/cmd/repo/clone/clone_test.go b/pkg/cmd/repo/clone/clone_test.go index c732c8bfe..96bb2bad1 100644 --- a/pkg/cmd/repo/clone/clone_test.go +++ b/pkg/cmd/repo/clone/clone_test.go @@ -179,3 +179,13 @@ func Test_RepoClone_withoutUsername(t *testing.T) { assert.Equal(t, 1, cs.Count) assert.Equal(t, "git clone https://github.com/OWNER/REPO.git", strings.Join(cs.Calls[0].Args, " ")) } + +func Test_RepoClone_flagError(t *testing.T) { + reg := &httpmock.Registry{} + httpClient := &http.Client{Transport: reg} + + _, err := runCloneCommand(httpClient, "--depth 1 OWNER/REPO") + if err == nil || err.Error() != "unknown flag: --depth\nSeparate git clone flags with `--`." { + t.Errorf("unexpected error %v", err) + } +} From 00bdedb4184affb1f5f56597e885b360c5168b97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohni=C4=87?= Date: Tue, 11 Aug 2020 17:05:15 +0200 Subject: [PATCH 4/4] :nail_care: Tweak wording --- pkg/cmd/repo/clone/clone.go | 12 +++++++----- pkg/cmd/repo/clone/clone_test.go | 7 ++----- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/pkg/cmd/repo/clone/clone.go b/pkg/cmd/repo/clone/clone.go index 1b474111a..9faa0da59 100644 --- a/pkg/cmd/repo/clone/clone.go +++ b/pkg/cmd/repo/clone/clone.go @@ -35,16 +35,18 @@ func NewCmdClone(f *cmdutil.Factory, runF func(*CloneOptions) error) *cobra.Comm } cmd := &cobra.Command{ - Use: "clone [] -- [...]", + DisableFlagsInUseLine: true, + + Use: "clone [] [-- ...]", Args: cobra.MinimumNArgs(1), Short: "Clone a repository locally", - Long: heredoc.Doc( - `Clone a GitHub repository locally. + Long: heredoc.Doc(` + Clone a GitHub repository locally. If the "OWNER/" portion of the "OWNER/REPO" repository argument is omitted, it defaults to the name of the authenticating user. - To pass 'git clone' flags, separate them with '--'. + Pass additional 'git clone' flags by listing them after '--'. `), RunE: func(cmd *cobra.Command, args []string) error { opts.Repository = args[0] @@ -62,7 +64,7 @@ func NewCmdClone(f *cmdutil.Factory, runF func(*CloneOptions) error) *cobra.Comm if err == pflag.ErrHelp { return err } - return &cmdutil.FlagError{Err: fmt.Errorf("%v\nSeparate git clone flags with `--`.", err)} + return &cmdutil.FlagError{Err: fmt.Errorf("%w\nSeparate git clone flags with '--'.", err)} }) return cmd diff --git a/pkg/cmd/repo/clone/clone_test.go b/pkg/cmd/repo/clone/clone_test.go index 96bb2bad1..54aa2f1cb 100644 --- a/pkg/cmd/repo/clone/clone_test.go +++ b/pkg/cmd/repo/clone/clone_test.go @@ -181,11 +181,8 @@ func Test_RepoClone_withoutUsername(t *testing.T) { } func Test_RepoClone_flagError(t *testing.T) { - reg := &httpmock.Registry{} - httpClient := &http.Client{Transport: reg} - - _, err := runCloneCommand(httpClient, "--depth 1 OWNER/REPO") - if err == nil || err.Error() != "unknown flag: --depth\nSeparate git clone flags with `--`." { + _, err := runCloneCommand(nil, "--depth 1 OWNER/REPO") + if err == nil || err.Error() != "unknown flag: --depth\nSeparate git clone flags with '--'." { t.Errorf("unexpected error %v", err) } }