Skip to content

Commit 5f305e8

Browse files
committed
Handle repo argument before remote name
1 parent 73c7fd5 commit 5f305e8

2 files changed

Lines changed: 32 additions & 14 deletions

File tree

pkg/cmd/repo/setdefault/setdefault.go

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -89,21 +89,23 @@ func NewCmdSetDefault(f *cmdutil.Factory, runF func(*SetDefaultOptions) error) *
8989
}
9090

9191
if len(args) > 0 {
92-
// First, try to find argument as a git remote name
93-
if !strings.Contains(args[0], "/") && opts.Remotes != nil {
94-
if remotes, err := opts.Remotes(); err == nil {
95-
if remote, err := remotes.FindByName(args[0]); err == nil {
96-
opts.Repo = remote.Repo
97-
}
92+
var err error
93+
opts.Repo, err = ghrepo.FromFullName(args[0])
94+
if err != nil {
95+
if opts.Remotes == nil {
96+
return fmt.Errorf("given arg is not a valid repo or git remote: %w", err)
9897
}
99-
}
100-
// If not found as remote name, try parsing as OWNER/REPO
101-
if opts.Repo == nil {
102-
var err error
103-
opts.Repo, err = ghrepo.FromFullName(args[0])
104-
if err != nil {
105-
return err
98+
99+
remotes, remoteErr := opts.Remotes()
100+
if remoteErr != nil {
101+
return remoteErr
102+
}
103+
104+
remote, findErr := remotes.FindByName(args[0])
105+
if findErr != nil {
106+
return fmt.Errorf("given arg is not a valid repo or git remote: %w", err)
106107
}
108+
opts.Repo = remote.Repo
107109
}
108110
}
109111

pkg/cmd/repo/setdefault/setdefault_test.go

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ func TestNewCmdSetDefault(t *testing.T) {
5050
},
5151
input: "some_invalid_format",
5252
wantErr: true,
53-
errMsg: `expected the "[HOST/]OWNER/REPO" format, got "some_invalid_format"`,
53+
errMsg: `given arg is not a valid repo or git remote: expected the "[HOST/]OWNER/REPO" format, got "some_invalid_format"`,
5454
},
5555
{
5656
name: "view flag",
@@ -93,6 +93,22 @@ func TestNewCmdSetDefault(t *testing.T) {
9393
input: "origin",
9494
output: SetDefaultOptions{Repo: ghrepo.New("OWNER", "REPO")},
9595
},
96+
{
97+
name: "repo argument despite remote name matching owner/repo",
98+
gitStubs: func(cs *run.CommandStubber) {
99+
cs.Register(`git rev-parse --git-dir`, 0, ".git")
100+
},
101+
remotes: func() (context.Remotes, error) {
102+
return context.Remotes{
103+
{
104+
Remote: &git.Remote{Name: "OWNER/REPO"},
105+
Repo: ghrepo.New("OTHER", "REPO"),
106+
},
107+
}, nil
108+
},
109+
input: "OWNER/REPO",
110+
output: SetDefaultOptions{Repo: ghrepo.New("OWNER", "REPO")},
111+
},
96112
}
97113

98114
for _, tt := range tests {

0 commit comments

Comments
 (0)