Skip to content

Commit

Permalink
Improve Git config
Browse files Browse the repository at this point in the history
  • Loading branch information
thomiceli committed Nov 23, 2024
1 parent 5994cd6 commit 8f482bc
Showing 1 changed file with 46 additions and 6 deletions.
52 changes: 46 additions & 6 deletions internal/git/config.go
Original file line number Diff line number Diff line change
@@ -1,15 +1,24 @@
package git

import "os/exec"
import (
"errors"
"os/exec"
"regexp"
)

type configEntry struct {
value string
fn func(string, string) error
}

func InitGitConfig() error {
configs := map[string]string{
"receive.advertisePushOptions": "true",
"safe.directory": "*",
configs := map[string]configEntry{
"receive.advertisePushOptions": {value: "true", fn: setGitConfig},
"safe.directory": {value: "*", fn: addGitConfig},
}

for key, value := range configs {
if err := setGitConfig(key, value); err != nil {
for key, entry := range configs {
if err := entry.fn(key, entry.value); err != nil {
return err
}
}
Expand All @@ -18,6 +27,37 @@ func InitGitConfig() error {
}

func setGitConfig(key, value string) error {
_, err := getGitConfig(key, value)
if err != nil && !checkErrorCode(err, 1) {
return err
}

cmd := exec.Command("git", "config", "--global", key, value)
return cmd.Run()
}

func addGitConfig(key, value string) error {
_, err := getGitConfig(key, regexp.QuoteMeta(value))
if err == nil {
return nil
}
if checkErrorCode(err, 1) {
cmd := exec.Command("git", "config", "--global", "--add", key, value)
return cmd.Run()
}
return err
}

func getGitConfig(key, value string) (string, error) {
cmd := exec.Command("git", "config", "--global", "--get", key, value)
out, err := cmd.Output()
return string(out), err
}

func checkErrorCode(err error, code int) bool {
var exitError *exec.ExitError
if errors.As(err, &exitError) {
return exitError.ExitCode() == code
}
return false
}

0 comments on commit 8f482bc

Please sign in to comment.