diff --git a/internal/git/git.go b/internal/git/git.go new file mode 100644 index 000000000..c91c2a105 --- /dev/null +++ b/internal/git/git.go @@ -0,0 +1,17 @@ +// Package git provides an integration with the git command +package git + +import ( + "errors" + "os/exec" +) + +// Run runs a git command and returns its output or errors +func Run(args ...string) (output string, err error) { + var cmd = exec.Command("git", args...) + bts, err := cmd.CombinedOutput() + if err != nil { + return "", errors.New(string(bts)) + } + return string(bts), err +} diff --git a/internal/git/git_test.go b/internal/git/git_test.go new file mode 100644 index 000000000..930b8e1bf --- /dev/null +++ b/internal/git/git_test.go @@ -0,0 +1,26 @@ +package git_test + +import ( + "testing" + + "github.com/goreleaser/goreleaser/internal/git" + "github.com/goreleaser/goreleaser/internal/testlib" + "github.com/stretchr/testify/assert" +) + +func TestGit(t *testing.T) { + var assert = assert.New(t) + _, back := testlib.Mktmp(t) + defer back() + out, err := git.Run("init") + assert.NoError(err) + assert.Contains(out, "Initialized empty Git repository") + + out, err = git.Run("command-that-dont-exist") + assert.Error(err) + assert.Empty(out) + assert.Equal( + "git: 'command-that-dont-exist' is not a git command. See 'git --help'.\n", + err.Error(), + ) +} diff --git a/internal/testlib/git.go b/internal/testlib/git.go index 2f09f8eb7..87ceefd37 100644 --- a/internal/testlib/git.go +++ b/internal/testlib/git.go @@ -1,17 +1,16 @@ package testlib import ( - "errors" - "os/exec" "testing" + "github.com/goreleaser/goreleaser/internal/git" "github.com/stretchr/testify/assert" ) // GitInit inits a new git project func GitInit(t *testing.T) { var assert = assert.New(t) - out, err := git("init") + out, err := fakeGit("init") assert.NoError(err) assert.Contains(out, "Initialized empty Git repository") assert.NoError(err) @@ -44,7 +43,7 @@ func GitTag(t *testing.T, tag string) { // GitAdd adds all files to stage func GitAdd(t *testing.T) { var assert = assert.New(t) - out, err := git("add", "-A") + out, err := fakeGit("add", "-A") assert.NoError(err) assert.Empty(out) } @@ -56,14 +55,5 @@ func fakeGit(args ...string) (string, error) { "-c", "commit.gpgSign=false", } allArgs = append(allArgs, args...) - return git(allArgs...) -} - -func git(args ...string) (output string, err error) { - var cmd = exec.Command("git", args...) - bts, err := cmd.CombinedOutput() - if err != nil { - return "", errors.New(string(bts)) - } - return string(bts), err + return git.Run(allArgs...) } diff --git a/pipeline/git/exec.go b/pipeline/git/exec.go index b89a9b052..b320a6405 100644 --- a/pipeline/git/exec.go +++ b/pipeline/git/exec.go @@ -1,21 +1,12 @@ package git import ( - "errors" - "os/exec" "strings" + + "github.com/goreleaser/goreleaser/internal/git" ) -func git(args ...string) (output string, err error) { - var cmd = exec.Command("git", args...) - bts, err := cmd.CombinedOutput() - if err != nil { - return "", errors.New(string(bts)) - } - return string(bts), err -} - func cleanGit(args ...string) (output string, err error) { - output, err = git(args...) + output, err = git.Run(args...) return strings.Replace(strings.Split(output, "\n")[0], "'", "", -1), err } diff --git a/pipeline/git/git.go b/pipeline/git/git.go index ac9603bca..bf433ad1a 100644 --- a/pipeline/git/git.go +++ b/pipeline/git/git.go @@ -12,6 +12,7 @@ import ( "github.com/apex/log" "github.com/goreleaser/goreleaser/context" + "github.com/goreleaser/goreleaser/internal/git" ) // Pipe for brew deployment @@ -101,7 +102,7 @@ func getSnapshotName(ctx *context.Context, tag, commit string) (string, error) { } func validate(ctx *context.Context, commit, tag string) error { - out, err := git("status", "--porcelain") + out, err := git.Run("status", "--porcelain") if strings.TrimSpace(out) != "" || err != nil { return ErrDirty{out} } @@ -132,7 +133,7 @@ func getChangelog(tag string) (string, error) { func gitLog(refs ...string) (string, error) { var args = []string{"log", "--pretty=oneline", "--abbrev-commit"} args = append(args, refs...) - return git(args...) + return git.Run(args...) } func getInfo() (tag, commit string, err error) {