107 lines
2.6 KiB
Go
107 lines
2.6 KiB
Go
|
package git
|
||
|
|
||
|
import (
|
||
|
"path"
|
||
|
"runtime"
|
||
|
"strings"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestDescribeCommit(t *testing.T) {
|
||
|
repo := createTestRepo(t)
|
||
|
defer cleanupTestRepo(t, repo)
|
||
|
|
||
|
describeOpts, err := DefaultDescribeOptions()
|
||
|
checkFatal(t, err)
|
||
|
|
||
|
formatOpts, err := DefaultDescribeFormatOptions()
|
||
|
checkFatal(t, err)
|
||
|
|
||
|
commitID, _ := seedTestRepo(t, repo)
|
||
|
|
||
|
commit, err := repo.LookupCommit(commitID)
|
||
|
checkFatal(t, err)
|
||
|
|
||
|
// No annotated tags can be used to describe master
|
||
|
_, err = commit.Describe(&describeOpts)
|
||
|
checkDescribeNoRefsFound(t, err)
|
||
|
|
||
|
// Fallback
|
||
|
fallback := describeOpts
|
||
|
fallback.ShowCommitOidAsFallback = true
|
||
|
result, err := commit.Describe(&fallback)
|
||
|
checkFatal(t, err)
|
||
|
resultStr, err := result.Format(&formatOpts)
|
||
|
checkFatal(t, err)
|
||
|
compareStrings(t, "473bf77", resultStr)
|
||
|
|
||
|
// Abbreviated
|
||
|
abbreviated := formatOpts
|
||
|
abbreviated.AbbreviatedSize = 2
|
||
|
result, err = commit.Describe(&fallback)
|
||
|
checkFatal(t, err)
|
||
|
resultStr, err = result.Format(&abbreviated)
|
||
|
checkFatal(t, err)
|
||
|
compareStrings(t, "473b", resultStr)
|
||
|
|
||
|
createTestTag(t, repo, commit)
|
||
|
|
||
|
// Exact tag
|
||
|
patternOpts := describeOpts
|
||
|
patternOpts.Pattern = "v[0-9]*"
|
||
|
result, err = commit.Describe(&patternOpts)
|
||
|
checkFatal(t, err)
|
||
|
resultStr, err = result.Format(&formatOpts)
|
||
|
checkFatal(t, err)
|
||
|
compareStrings(t, "v0.0.0", resultStr)
|
||
|
|
||
|
// Pattern no match
|
||
|
patternOpts.Pattern = "v[1-9]*"
|
||
|
result, err = commit.Describe(&patternOpts)
|
||
|
checkDescribeNoRefsFound(t, err)
|
||
|
|
||
|
commitID, _ = updateReadme(t, repo, "update1")
|
||
|
commit, err = repo.LookupCommit(commitID)
|
||
|
checkFatal(t, err)
|
||
|
|
||
|
// Tag-1
|
||
|
result, err = commit.Describe(&describeOpts)
|
||
|
checkFatal(t, err)
|
||
|
resultStr, err = result.Format(&formatOpts)
|
||
|
checkFatal(t, err)
|
||
|
compareStrings(t, "v0.0.0-1-gd88ef8d", resultStr)
|
||
|
|
||
|
// Strategy: All
|
||
|
describeOpts.Strategy = DescribeAll
|
||
|
result, err = commit.Describe(&describeOpts)
|
||
|
checkFatal(t, err)
|
||
|
resultStr, err = result.Format(&formatOpts)
|
||
|
checkFatal(t, err)
|
||
|
compareStrings(t, "heads/master", resultStr)
|
||
|
|
||
|
repo.CreateBranch("hotfix", commit, false)
|
||
|
|
||
|
// Workdir (branch)
|
||
|
result, err = repo.DescribeWorkdir(&describeOpts)
|
||
|
checkFatal(t, err)
|
||
|
resultStr, err = result.Format(&formatOpts)
|
||
|
checkFatal(t, err)
|
||
|
compareStrings(t, "heads/hotfix", resultStr)
|
||
|
}
|
||
|
|
||
|
func checkDescribeNoRefsFound(t *testing.T, err error) {
|
||
|
// The failure happens at wherever we were called, not here
|
||
|
_, file, line, ok := runtime.Caller(1)
|
||
|
if !ok {
|
||
|
t.Fatalf("Unable to get caller")
|
||
|
}
|
||
|
if err == nil || !strings.Contains(err.Error(), "No reference found, cannot describe anything") {
|
||
|
t.Fatalf(
|
||
|
"%s:%v: was expecting error 'No reference found, cannot describe anything', got %v",
|
||
|
path.Base(file),
|
||
|
line,
|
||
|
err,
|
||
|
)
|
||
|
}
|
||
|
}
|