Skip to content

Commit 90fc20f

Browse files
committed
git: consolidate Git process creation
Not only does this reduce duplicate code, but it allows us to specify the LC_CTYPE=C environment so we can parse the specific error message made when creating an empty bundle.
1 parent 3d0746a commit 90fc20f

File tree

1 file changed

+20
-13
lines changed

1 file changed

+20
-13
lines changed

internal/git/git.go

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,28 @@ import (
88
"strings"
99
)
1010

11-
func GitCommand(args ...string) error {
12-
git, lookErr := exec.LookPath("git")
13-
14-
if lookErr != nil {
15-
return lookErr
11+
func GetExecCommand(args []string) (*exec.Cmd, error) {
12+
git, err := exec.LookPath("git")
13+
if err != nil {
14+
return nil, fmt.Errorf("failed to find 'git' on the path: %w", err)
1615
}
1716

1817
cmd := exec.Command(git, args...)
18+
cmd.Env = append(cmd.Env, "LC_CTYPE=C")
19+
20+
return cmd, nil
21+
}
22+
23+
func GitCommand(args ...string) error {
24+
cmd, err := GetExecCommand(args)
25+
if err != nil {
26+
return err
27+
}
28+
1929
cmd.Stderr = os.Stderr
2030
cmd.Stdout = os.Stdout
2131

22-
err := cmd.Start()
32+
err = cmd.Start()
2333
if err != nil {
2434
return fmt.Errorf("git command failed to start: %w", err)
2535
}
@@ -33,26 +43,23 @@ func GitCommand(args ...string) error {
3343
}
3444

3545
func GitCommandWithStdin(stdinLines []string, args ...string) error {
36-
git, lookErr := exec.LookPath("git")
37-
38-
if lookErr != nil {
39-
return lookErr
46+
cmd, err := GetExecCommand(args)
47+
if err != nil {
48+
return err
4049
}
4150

4251
buffer := bytes.Buffer{}
4352
for line := range stdinLines {
4453
buffer.Write([]byte(stdinLines[line] + "\n"))
4554
}
4655

47-
cmd := exec.Command(git, args...)
48-
4956
cmd.Stdin = &buffer
5057

5158
errorBuffer := bytes.Buffer{}
5259
cmd.Stderr = &errorBuffer
5360
cmd.Stdout = os.Stdout
5461

55-
err := cmd.Start()
62+
err = cmd.Start()
5663
if err != nil {
5764
return fmt.Errorf("git command failed to start: %w", err)
5865
}

0 commit comments

Comments
 (0)