Go-version constraints ignore pre-releases. Rather than change the library further this PR simply changes the git version comparison to use simple version compare ignoring the issue of pre-releases. Signed-off-by: Andrew Thornton <art27@cantab.net>tags/v1.15.0-dev
@@ -477,7 +477,7 @@ func (c *Commit) GetBranchName() (string, error) { | |||||
args := []string{ | args := []string{ | ||||
"name-rev", | "name-rev", | ||||
} | } | ||||
if CheckGitVersionConstraint(">= 2.13.0") == nil { | |||||
if CheckGitVersionAtLeast("2.13.0") == nil { | |||||
args = append(args, "--exclude", "refs/tags/*") | args = append(args, "--exclude", "refs/tags/*") | ||||
} | } | ||||
args = append(args, "--name-only", "--no-undefined", c.ID.String()) | args = append(args, "--name-only", "--no-undefined", c.ID.String()) | ||||
@@ -150,13 +150,13 @@ func Init(ctx context.Context) error { | |||||
return err | return err | ||||
} | } | ||||
if CheckGitVersionConstraint(">= 2.10") == nil { | |||||
if CheckGitVersionAtLeast("2.10") == nil { | |||||
if err := checkAndSetConfig("receive.advertisePushOptions", "true", true); err != nil { | if err := checkAndSetConfig("receive.advertisePushOptions", "true", true); err != nil { | ||||
return err | return err | ||||
} | } | ||||
} | } | ||||
if CheckGitVersionConstraint(">= 2.18") == nil { | |||||
if CheckGitVersionAtLeast("2.18") == nil { | |||||
if err := checkAndSetConfig("core.commitGraph", "true", true); err != nil { | if err := checkAndSetConfig("core.commitGraph", "true", true); err != nil { | ||||
return err | return err | ||||
} | } | ||||
@@ -173,17 +173,17 @@ func Init(ctx context.Context) error { | |||||
return nil | return nil | ||||
} | } | ||||
// CheckGitVersionConstraint check version constrain against local installed git version | |||||
func CheckGitVersionConstraint(constraint string) error { | |||||
// CheckGitVersionAtLeast check git version is at least the constraint version | |||||
func CheckGitVersionAtLeast(atLeast string) error { | |||||
if err := LoadGitVersion(); err != nil { | if err := LoadGitVersion(); err != nil { | ||||
return err | return err | ||||
} | } | ||||
check, err := version.NewConstraint(constraint) | |||||
atLeastVersion, err := version.NewVersion(atLeast) | |||||
if err != nil { | if err != nil { | ||||
return err | return err | ||||
} | } | ||||
if !check.Check(gitVersion) { | |||||
return fmt.Errorf("installed git binary %s does not satisfy version constraint %s", gitVersion.Original(), constraint) | |||||
if gitVersion.Compare(atLeastVersion) < 0 { | |||||
return fmt.Errorf("installed git binary version %s is not at least %s", gitVersion.Original(), atLeast) | |||||
} | } | ||||
return nil | return nil | ||||
} | } | ||||
@@ -40,7 +40,7 @@ func (repo *Repository) CheckAttribute(opts CheckAttributeOpts) (map[string]map[ | |||||
} | } | ||||
// git check-attr --cached first appears in git 1.7.8 | // git check-attr --cached first appears in git 1.7.8 | ||||
if opts.CachedOnly && CheckGitVersionConstraint(">= 1.7.8") == nil { | |||||
if opts.CachedOnly && CheckGitVersionAtLeast("1.7.8") == nil { | |||||
cmdArgs = append(cmdArgs, "--cached") | cmdArgs = append(cmdArgs, "--cached") | ||||
} | } | ||||
@@ -469,7 +469,7 @@ func (repo *Repository) getCommitsBeforeLimit(id SHA1, num int) (*list.List, err | |||||
} | } | ||||
func (repo *Repository) getBranches(commit *Commit, limit int) ([]string, error) { | func (repo *Repository) getBranches(commit *Commit, limit int) ([]string, error) { | ||||
if CheckGitVersionConstraint(">= 2.7.0") == nil { | |||||
if CheckGitVersionAtLeast("2.7.0") == nil { | |||||
stdout, err := NewCommand("for-each-ref", "--count="+strconv.Itoa(limit), "--format=%(refname:strip=2)", "--contains", commit.ID.String(), BranchPrefix).RunInDir(repo.Path) | stdout, err := NewCommand("for-each-ref", "--count="+strconv.Itoa(limit), "--format=%(refname:strip=2)", "--contains", commit.ID.String(), BranchPrefix).RunInDir(repo.Path) | ||||
if err != nil { | if err != nil { | ||||
return nil, err | return nil, err | ||||
@@ -89,11 +89,11 @@ func (repo *Repository) CommitTree(author *Signature, committer *Signature, tree | |||||
_, _ = messageBytes.WriteString(opts.Message) | _, _ = messageBytes.WriteString(opts.Message) | ||||
_, _ = messageBytes.WriteString("\n") | _, _ = messageBytes.WriteString("\n") | ||||
if CheckGitVersionConstraint(">= 1.7.9") == nil && (opts.KeyID != "" || opts.AlwaysSign) { | |||||
if CheckGitVersionAtLeast("1.7.9") == nil && (opts.KeyID != "" || opts.AlwaysSign) { | |||||
cmd.AddArguments(fmt.Sprintf("-S%s", opts.KeyID)) | cmd.AddArguments(fmt.Sprintf("-S%s", opts.KeyID)) | ||||
} | } | ||||
if CheckGitVersionConstraint(">= 2.0.0") == nil && opts.NoGPGSign { | |||||
if CheckGitVersionAtLeast("2.0.0") == nil && opts.NoGPGSign { | |||||
cmd.AddArguments("--no-gpg-sign") | cmd.AddArguments("--no-gpg-sign") | ||||
} | } | ||||
@@ -214,7 +214,7 @@ func (t *TemporaryUploadRepository) CommitTreeWithDate(author, committer *models | |||||
args := []string{"commit-tree", treeHash, "-p", "HEAD"} | args := []string{"commit-tree", treeHash, "-p", "HEAD"} | ||||
// Determine if we should sign | // Determine if we should sign | ||||
if git.CheckGitVersionConstraint(">= 1.7.9") == nil { | |||||
if git.CheckGitVersionAtLeast("1.7.9") == nil { | |||||
sign, keyID, signer, _ := t.repo.SignCRUDAction(author, t.basePath, "HEAD") | sign, keyID, signer, _ := t.repo.SignCRUDAction(author, t.basePath, "HEAD") | ||||
if sign { | if sign { | ||||
args = append(args, "-S"+keyID) | args = append(args, "-S"+keyID) | ||||
@@ -231,7 +231,7 @@ func (t *TemporaryUploadRepository) CommitTreeWithDate(author, committer *models | |||||
} | } | ||||
committerSig = signer | committerSig = signer | ||||
} | } | ||||
} else if git.CheckGitVersionConstraint(">= 2.0.0") == nil { | |||||
} else if git.CheckGitVersionAtLeast("2.0.0") == nil { | |||||
args = append(args, "--no-gpg-sign") | args = append(args, "--no-gpg-sign") | ||||
} | } | ||||
} | } | ||||
@@ -335,7 +335,7 @@ func (t *TemporaryUploadRepository) CheckAttribute(attribute string, args ...str | |||||
cmdArgs := []string{"check-attr", "-z", attribute} | cmdArgs := []string{"check-attr", "-z", attribute} | ||||
// git check-attr --cached first appears in git 1.7.8 | // git check-attr --cached first appears in git 1.7.8 | ||||
if git.CheckGitVersionConstraint(">= 1.7.8") == nil { | |||||
if git.CheckGitVersionAtLeast("1.7.8") == nil { | |||||
cmdArgs = append(cmdArgs, "--cached") | cmdArgs = append(cmdArgs, "--cached") | ||||
} | } | ||||
cmdArgs = append(cmdArgs, "--") | cmdArgs = append(cmdArgs, "--") | ||||
@@ -131,7 +131,7 @@ func initRepoCommit(tmpPath string, repo *models.Repository, u *models.User, def | |||||
"-m", "Initial commit", | "-m", "Initial commit", | ||||
} | } | ||||
if git.CheckGitVersionConstraint(">= 1.7.9") == nil { | |||||
if git.CheckGitVersionAtLeast("1.7.9") == nil { | |||||
sign, keyID, signer, _ := models.SignInitialCommit(tmpPath, u) | sign, keyID, signer, _ := models.SignInitialCommit(tmpPath, u) | ||||
if sign { | if sign { | ||||
args = append(args, "-S"+keyID) | args = append(args, "-S"+keyID) | ||||
@@ -141,7 +141,7 @@ func initRepoCommit(tmpPath string, repo *models.Repository, u *models.User, def | |||||
committerName = signer.Name | committerName = signer.Name | ||||
committerEmail = signer.Email | committerEmail = signer.Email | ||||
} | } | ||||
} else if git.CheckGitVersionConstraint(">= 2.0.0") == nil { | |||||
} else if git.CheckGitVersionAtLeast("2.0.0") == nil { | |||||
args = append(args, "--no-gpg-sign") | args = append(args, "--no-gpg-sign") | ||||
} | } | ||||
} | } | ||||
@@ -74,7 +74,7 @@ func newGit() { | |||||
log.Fatal("Error retrieving git version: %v", err) | log.Fatal("Error retrieving git version: %v", err) | ||||
} | } | ||||
if git.CheckGitVersionConstraint(">= 2.9") == nil { | |||||
if git.CheckGitVersionAtLeast("2.9") == nil { | |||||
// Explicitly disable credential helper, otherwise Git credentials might leak | // Explicitly disable credential helper, otherwise Git credentials might leak | ||||
git.GlobalCommandArgs = append(git.GlobalCommandArgs, "-c", "credential.helper=") | git.GlobalCommandArgs = append(git.GlobalCommandArgs, "-c", "credential.helper=") | ||||
} | } | ||||
@@ -82,7 +82,7 @@ func newGit() { | |||||
var format = "Git Version: %s" | var format = "Git Version: %s" | ||||
var args = []interface{}{version.Original()} | var args = []interface{}{version.Original()} | ||||
// Since git wire protocol has been released from git v2.18 | // Since git wire protocol has been released from git v2.18 | ||||
if Git.EnableAutoGitWireProtocol && git.CheckGitVersionConstraint(">= 2.18") == nil { | |||||
if Git.EnableAutoGitWireProtocol && git.CheckGitVersionAtLeast("2.18") == nil { | |||||
git.GlobalCommandArgs = append(git.GlobalCommandArgs, "-c", "protocol.version=2") | git.GlobalCommandArgs = append(git.GlobalCommandArgs, "-c", "protocol.version=2") | ||||
format += ", Wire Protocol %s Enabled" | format += ", Wire Protocol %s Enabled" | ||||
args = append(args, "Version 2") // for focus color | args = append(args, "Version 2") // for focus color | ||||
@@ -96,7 +96,7 @@ func CheckLFSVersion() { | |||||
log.Fatal("Error retrieving git version: %v", err) | log.Fatal("Error retrieving git version: %v", err) | ||||
} | } | ||||
if git.CheckGitVersionConstraint(">= 2.1.2") != nil { | |||||
if git.CheckGitVersionAtLeast("2.1.2") != nil { | |||||
LFS.StartServer = false | LFS.StartServer = false | ||||
log.Error("LFS server support needs at least Git v2.1.2") | log.Error("LFS server support needs at least Git v2.1.2") | ||||
} else { | } else { | ||||
@@ -584,7 +584,7 @@ func LFSPointerFiles(ctx *context.Context) { | |||||
go createPointerResultsFromCatFileBatch(catFileBatchReader, &wg, pointerChan, ctx.Repo.Repository, ctx.User) | go createPointerResultsFromCatFileBatch(catFileBatchReader, &wg, pointerChan, ctx.Repo.Repository, ctx.User) | ||||
go pipeline.CatFileBatch(shasToBatchReader, catFileBatchWriter, &wg, basePath) | go pipeline.CatFileBatch(shasToBatchReader, catFileBatchWriter, &wg, basePath) | ||||
go pipeline.BlobsLessThan1024FromCatFileBatchCheck(catFileCheckReader, shasToBatchWriter, &wg) | go pipeline.BlobsLessThan1024FromCatFileBatchCheck(catFileCheckReader, shasToBatchWriter, &wg) | ||||
if git.CheckGitVersionConstraint(">= 2.6.0") != nil { | |||||
if git.CheckGitVersionAtLeast("2.6.0") != nil { | |||||
revListReader, revListWriter := io.Pipe() | revListReader, revListWriter := io.Pipe() | ||||
shasToCheckReader, shasToCheckWriter := io.Pipe() | shasToCheckReader, shasToCheckWriter := io.Pipe() | ||||
wg.Add(2) | wg.Add(2) | ||||
@@ -46,7 +46,7 @@ func remoteAddress(repoPath string) (string, error) { | |||||
if err != nil { | if err != nil { | ||||
return "", err | return "", err | ||||
} | } | ||||
if git.CheckGitVersionConstraint(">= 2.7") == nil { | |||||
if git.CheckGitVersionAtLeast("2.7") == nil { | |||||
cmd = git.NewCommand("remote", "get-url", "origin") | cmd = git.NewCommand("remote", "get-url", "origin") | ||||
} else { | } else { | ||||
cmd = git.NewCommand("config", "--get", "remote.origin.url") | cmd = git.NewCommand("config", "--get", "remote.origin.url") | ||||
@@ -155,7 +155,7 @@ func rawMerge(pr *models.PullRequest, doer *models.User, mergeStyle models.Merge | |||||
} | } | ||||
var gitConfigCommand func() *git.Command | var gitConfigCommand func() *git.Command | ||||
if git.CheckGitVersionConstraint(">= 1.8.0") == nil { | |||||
if git.CheckGitVersionAtLeast("1.8.0") == nil { | |||||
gitConfigCommand = func() *git.Command { | gitConfigCommand = func() *git.Command { | ||||
return git.NewCommand("config", "--local") | return git.NewCommand("config", "--local") | ||||
} | } | ||||
@@ -214,14 +214,14 @@ func rawMerge(pr *models.PullRequest, doer *models.User, mergeStyle models.Merge | |||||
// Determine if we should sign | // Determine if we should sign | ||||
signArg := "" | signArg := "" | ||||
if git.CheckGitVersionConstraint(">= 1.7.9") == nil { | |||||
if git.CheckGitVersionAtLeast("1.7.9") == nil { | |||||
sign, keyID, signer, _ := pr.SignMerge(doer, tmpBasePath, "HEAD", trackingBranch) | sign, keyID, signer, _ := pr.SignMerge(doer, tmpBasePath, "HEAD", trackingBranch) | ||||
if sign { | if sign { | ||||
signArg = "-S" + keyID | signArg = "-S" + keyID | ||||
if pr.BaseRepo.GetTrustModel() == models.CommitterTrustModel || pr.BaseRepo.GetTrustModel() == models.CollaboratorCommitterTrustModel { | if pr.BaseRepo.GetTrustModel() == models.CommitterTrustModel || pr.BaseRepo.GetTrustModel() == models.CollaboratorCommitterTrustModel { | ||||
committer = signer | committer = signer | ||||
} | } | ||||
} else if git.CheckGitVersionConstraint(">= 2.0.0") == nil { | |||||
} else if git.CheckGitVersionAtLeast("2.0.0") == nil { | |||||
signArg = "--no-gpg-sign" | signArg = "--no-gpg-sign" | ||||
} | } | ||||
} | } | ||||