From d41efa7a6a1f4e08ac8ec03e84a8d09e51368597 Mon Sep 17 00:00:00 2001 From: tdakkota Date: Tue, 18 Oct 2022 09:36:52 +0300 Subject: [PATCH] Fix #6452 (#6453) --- git/client.go | 6 +++++- git/client_test.go | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/git/client.go b/git/client.go index 7d8686f17..c6bfc21ac 100644 --- a/git/client.go +++ b/git/client.go @@ -163,7 +163,11 @@ func (c *Client) Remotes(ctx context.Context) (RemoteSet, error) { } configOut, configErr := configCmd.Output() if configErr != nil { - return nil, &GitError{err: configErr} + // Ignore exit code 1 as it means there are no resolved remotes. + var exitErr *exec.ExitError + if errors.As(configErr, &exitErr) && exitErr.ExitCode() != 1 { + return nil, &GitError{err: configErr} + } } remotes := parseRemotes(outputLines(remoteOut)) diff --git a/git/client_test.go b/git/client_test.go index d8cff126b..121231d23 100644 --- a/git/client_test.go +++ b/git/client_test.go @@ -122,6 +122,40 @@ func TestClientRemotes(t *testing.T) { assert.Equal(t, "other", rs[3].Resolved) } +func TestClientRemotesNoResolvedRemote(t *testing.T) { + tempDir := t.TempDir() + initRepo(t, tempDir) + gitDir := filepath.Join(tempDir, ".git") + remoteFile := filepath.Join(gitDir, "config") + remotes := ` +[remote "origin"] + url = git@example.com:monalisa/origin.git +[remote "test"] + url = git://github.com/hubot/test.git +[remote "upstream"] + url = https://github.com/monalisa/upstream.git +[remote "github"] + url = git@github.com:hubot/github.git +` + f, err := os.OpenFile(remoteFile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0755) + assert.NoError(t, err) + _, err = f.Write([]byte(remotes)) + assert.NoError(t, err) + err = f.Close() + assert.NoError(t, err) + client := Client{ + RepoDir: tempDir, + } + rs, err := client.Remotes(context.Background()) + assert.NoError(t, err) + assert.Equal(t, 4, len(rs)) + assert.Equal(t, "upstream", rs[0].Name) + assert.Equal(t, "github", rs[1].Name) + assert.Equal(t, "origin", rs[2].Name) + assert.Equal(t, "", rs[2].Resolved) + assert.Equal(t, "test", rs[3].Name) +} + func TestParseRemotes(t *testing.T) { remoteList := []string{ "mona\tgit@github.com:monalisa/myfork.git (fetch)",