1
0
mirror of https://github.com/goreleaser/goreleaser.git synced 2025-02-05 13:15:26 +02:00

feat: git diff when dirty (#1178)

Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
This commit is contained in:
Carlos Alexandro Becker 2019-10-06 17:56:53 -03:00 committed by GitHub
parent 622254a7df
commit 39d07c375d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 19 additions and 4 deletions

1
go.sum
View File

@ -316,6 +316,7 @@ github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jW
github.com/steveyen/gtreap v0.0.0-20150807155958-0abe01ef9be2/go.mod h1:mjqs7N0Q6m5HpR7QfXVBZXZWSqTjQLeTujjA/xUp2uw=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48=
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=

View File

@ -99,11 +99,10 @@ func validate(ctx *context.Context) error {
if ctx.SkipValidate {
return pipe.ErrSkipValidateEnabled
}
out, err := git.Run("status", "--porcelain")
if strings.TrimSpace(out) != "" || err != nil {
return ErrDirty{status: out}
if hasDiff() {
return diffErr()
}
_, err = git.Clean(git.Run("describe", "--exact-match", "--tags", "--match", ctx.Git.CurrentTag))
_, err := git.Clean(git.Run("describe", "--exact-match", "--tags", "--match", ctx.Git.CurrentTag))
if err != nil {
return ErrWrongRef{
commit: ctx.Git.Commit,
@ -113,6 +112,20 @@ func validate(ctx *context.Context) error {
return nil
}
func diffErr() error {
out, err := git.Run("diff")
if err != nil {
// in theory this will never happen...
return ErrDirty{status: err.Error()}
}
return ErrDirty{status: out}
}
func hasDiff() bool {
out, err := git.Run("status", "--porcelain")
return strings.TrimSpace(out) != "" || err != nil
}
func getShortCommit() (string, error) {
return git.Clean(git.Run("show", "--format='%h'", "HEAD", "-q"))
}

View File

@ -91,6 +91,7 @@ func TestDirty(t *testing.T) {
err = Pipe{}.Run(context.New(config.Project{}))
assert.Error(t, err)
assert.Contains(t, err.Error(), "git is currently in a dirty state")
assert.Contains(t, err.Error(), "+lorem ipsum")
})
t.Run("skip validate is set", func(t *testing.T) {
ctx := context.New(config.Project{})