diff --git a/pkg/bisect/bisect_test.go b/pkg/bisect/bisect_test.go index 7a1d02a9..ff460227 100644 --- a/pkg/bisect/bisect_test.go +++ b/pkg/bisect/bisect_test.go @@ -85,6 +85,9 @@ func TestBisectCause(t *testing.T) { } } } + if !originRepo.SupportsBisection() { + t.Skip("bisection is unsupported by git (probably too old version)") + } repo := vcs.CloneTestRepo(t, baseDir, "repo", originRepo) r, err := vcs.NewRepo("test", "64", repo.Dir) if err != nil { diff --git a/pkg/vcs/test_util.go b/pkg/vcs/test_util.go index 55bd7bcc..148360a0 100644 --- a/pkg/vcs/test_util.go +++ b/pkg/vcs/test_util.go @@ -3,6 +3,7 @@ package vcs import ( "fmt" "path/filepath" + "strings" "testing" "time" @@ -82,6 +83,14 @@ func (repo *TestRepo) SetTag(tag string) { repo.git("tag", tag) } +func (repo *TestRepo) SupportsBisection() bool { + // Detect too old git binary. --no-contains appeared in git 2.13. + _, err := repo.repo.previousReleaseTags("HEAD", true) + return err == nil || + !strings.Contains(err.Error(), "usage: git tag") && + !strings.Contains(err.Error(), "error: unknown option") +} + func CreateTestRepo(t *testing.T, baseDir, name string) *TestRepo { repo := MakeTestRepo(t, filepath.Join(baseDir, name)) repo.git("checkout", "-b", "master")