diff --git a/pkg/cmd/secret/delete/delete.go b/pkg/cmd/secret/delete/delete.go index 75d061e7f..70aab4be5 100644 --- a/pkg/cmd/secret/delete/delete.go +++ b/pkg/cmd/secret/delete/delete.go @@ -111,7 +111,7 @@ func removeRun(opts *DeleteOptions) error { return err } - err = cmdutil.ValidateHasOnlyOneRemote(opts.HasRepoOverride, opts.Remotes) + err = shared.ValidateHasOnlyOneRemote(opts.HasRepoOverride, opts.Remotes) if err != nil { return err } diff --git a/pkg/cmd/secret/list/list.go b/pkg/cmd/secret/list/list.go index b87c31998..5c13234d0 100644 --- a/pkg/cmd/secret/list/list.go +++ b/pkg/cmd/secret/list/list.go @@ -109,7 +109,7 @@ func listRun(opts *ListOptions) error { return err } - err = cmdutil.ValidateHasOnlyOneRemote(opts.HasRepoOverride, opts.Remotes) + err = shared.ValidateHasOnlyOneRemote(opts.HasRepoOverride, opts.Remotes) if err != nil { return err } diff --git a/pkg/cmd/secret/set/set.go b/pkg/cmd/secret/set/set.go index 74bd7b33c..b4630e067 100644 --- a/pkg/cmd/secret/set/set.go +++ b/pkg/cmd/secret/set/set.go @@ -198,12 +198,12 @@ func setRun(opts *SetOptions) error { return err } - if err = cmdutil.ValidateHasOnlyOneRemote(opts.HasRepoOverride, opts.Remotes); err != nil { + if err = shared.ValidateHasOnlyOneRemote(opts.HasRepoOverride, opts.Remotes); err != nil { if !opts.CanPrompt { return err } - selectedRepo, errSelectingRepo := cmdutil.PromptForRepo(baseRepo, opts.Remotes, opts.Prompter) + selectedRepo, errSelectingRepo := shared.PromptForRepo(baseRepo, opts.Remotes, opts.Prompter) if errSelectingRepo != nil { return errSelectingRepo } diff --git a/pkg/cmd/secret/shared/base_repo.go b/pkg/cmd/secret/shared/base_repo.go new file mode 100644 index 000000000..db2dfc8f1 --- /dev/null +++ b/pkg/cmd/secret/shared/base_repo.go @@ -0,0 +1,55 @@ +package shared + +import ( + "fmt" + + ghContext "github.com/cli/cli/v2/context" + "github.com/cli/cli/v2/internal/ghrepo" + "github.com/cli/cli/v2/internal/prompter" +) + +func ValidateHasOnlyOneRemote(hasRepoOverride bool, remotes func() (ghContext.Remotes, error)) error { + if !hasRepoOverride && remotes != nil { + remotes, err := remotes() + if err != nil { + return err + } + + if remotes.Len() > 1 { + return fmt.Errorf("multiple remotes detected %v. please specify which repo to use by providing the -R or --repo argument", remotes) + } + } + + return nil +} + +func PromptForRepo(baseRepo ghrepo.Interface, remotes func() (ghContext.Remotes, error), survey prompter.Prompter) (ghrepo.Interface, error) { + var defaultRepo string + var remoteArray []string + + if remotes, _ := remotes(); remotes != nil { + if defaultRemote, _ := remotes.ResolvedRemote(); defaultRemote != nil { + // this is a remote explicitly chosen via `repo set-default` + defaultRepo = ghrepo.FullName(defaultRemote) + } else if len(remotes) > 0 { + // as a fallback, just pick the first remote + defaultRepo = ghrepo.FullName(remotes[0]) + } + + for _, remote := range remotes { + remoteArray = append(remoteArray, ghrepo.FullName(remote)) + } + } + + baseRepoInput, errInput := survey.Select("Select a base repo", defaultRepo, remoteArray) + if errInput != nil { + return baseRepo, errInput + } + + selectedRepo, errSelectedRepo := ghrepo.FromFullName(remoteArray[baseRepoInput]) + if errSelectedRepo != nil { + return baseRepo, errSelectedRepo + } + + return selectedRepo, nil +} diff --git a/pkg/cmdutil/errors.go b/pkg/cmdutil/errors.go index e1a37d0c8..edb97abcd 100644 --- a/pkg/cmdutil/errors.go +++ b/pkg/cmdutil/errors.go @@ -5,7 +5,6 @@ import ( "fmt" "github.com/AlecAivazis/survey/v2/terminal" - ghContext "github.com/cli/cli/v2/context" ) // FlagErrorf returns a new FlagError that wraps an error produced by @@ -58,21 +57,6 @@ func MutuallyExclusive(message string, conditions ...bool) error { return nil } -func ValidateHasOnlyOneRemote(hasRepoOverride bool, remotes func() (ghContext.Remotes, error)) error { - if !hasRepoOverride && remotes != nil { - remotes, err := remotes() - if err != nil { - return err - } - - if remotes.Len() > 1 { - return fmt.Errorf("multiple remotes detected %v. please specify which repo to use by providing the -R or --repo argument", remotes) - } - } - - return nil -} - type NoResultsError struct { message string } diff --git a/pkg/cmdutil/repo_override.go b/pkg/cmdutil/repo_override.go index 41a4a4799..791dd919a 100644 --- a/pkg/cmdutil/repo_override.go +++ b/pkg/cmdutil/repo_override.go @@ -1,13 +1,11 @@ package cmdutil import ( - ghContext "github.com/cli/cli/v2/context" "os" "sort" "strings" "github.com/cli/cli/v2/internal/ghrepo" - "github.com/cli/cli/v2/internal/prompter" "github.com/spf13/cobra" ) @@ -70,34 +68,3 @@ func OverrideBaseRepoFunc(f *Factory, override string) func() (ghrepo.Interface, } return f.BaseRepo } - -func PromptForRepo(baseRepo ghrepo.Interface, remotes func() (ghContext.Remotes, error), survey prompter.Prompter) (ghrepo.Interface, error) { - var defaultRepo string - var remoteArray []string - - if remotes, _ := remotes(); remotes != nil { - if defaultRemote, _ := remotes.ResolvedRemote(); defaultRemote != nil { - // this is a remote explicitly chosen via `repo set-default` - defaultRepo = ghrepo.FullName(defaultRemote) - } else if len(remotes) > 0 { - // as a fallback, just pick the first remote - defaultRepo = ghrepo.FullName(remotes[0]) - } - - for _, remote := range remotes { - remoteArray = append(remoteArray, ghrepo.FullName(remote)) - } - } - - baseRepoInput, errInput := survey.Select("Select a base repo", defaultRepo, remoteArray) - if errInput != nil { - return baseRepo, errInput - } - - selectedRepo, errSelectedRepo := ghrepo.FromFullName(remoteArray[baseRepoInput]) - if errSelectedRepo != nil { - return baseRepo, errSelectedRepo - } - - return selectedRepo, nil -}