summaryrefslogtreecommitdiffstats
path: root/modules/repofiles/temp_repo.go
diff options
context:
space:
mode:
authorzeripath <art27@cantab.net>2019-10-12 01:13:27 +0100
committerLunny Xiao <xiaolunwen@gmail.com>2019-10-12 08:13:27 +0800
commit5e759b60cca3cd8484a6235fcc9120d18e8cd455 (patch)
treeb9932067119f16197f69f12ec9b04aa74f68845a /modules/repofiles/temp_repo.go
parentac3613b791884f29c386bda2ccaad5c7434d822c (diff)
downloadgitea-5e759b60cca3cd8484a6235fcc9120d18e8cd455.tar.gz
gitea-5e759b60cca3cd8484a6235fcc9120d18e8cd455.zip
Restore functionality for early gits (#7775)
* Change tests to make it possible to run TestGit with 1.7.2 * Make merge run on 1.7.2 * Fix tracking and staging branch name problem * Ensure that git 1.7.2 works on tests * ensure that there is no chance for conflicts * Fix-up missing merge issues * Final rm * Ensure LFS filters run on the tests * Do not sign commits from temp repo * Restore tracking fetch change * Apply suggestions from code review * Update modules/repofiles/temp_repo.go
Diffstat (limited to 'modules/repofiles/temp_repo.go')
-rw-r--r--modules/repofiles/temp_repo.go38
1 files changed, 34 insertions, 4 deletions
diff --git a/modules/repofiles/temp_repo.go b/modules/repofiles/temp_repo.go
index f791c3cb96..4a50e64192 100644
--- a/modules/repofiles/temp_repo.go
+++ b/modules/repofiles/temp_repo.go
@@ -21,6 +21,8 @@ import (
"code.gitea.io/gitea/modules/process"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/services/gitdiff"
+
+ "github.com/mcuadros/go-version"
)
// TemporaryUploadRepository is a type to wrap our upload repositories as a shallow clone
@@ -254,6 +256,11 @@ func (t *TemporaryUploadRepository) CommitTree(author, committer *models.User, t
authorSig := author.NewGitSig()
committerSig := committer.NewGitSig()
+ binVersion, err := git.BinVersion()
+ if err != nil {
+ return "", fmt.Errorf("Unable to get git version: %v", err)
+ }
+
// FIXME: Should we add SSH_ORIGINAL_COMMAND to this
// Because this may call hooks we should pass in the environment
env := append(os.Environ(),
@@ -264,11 +271,21 @@ func (t *TemporaryUploadRepository) CommitTree(author, committer *models.User, t
"GIT_COMMITTER_EMAIL="+committerSig.Email,
"GIT_COMMITTER_DATE="+commitTimeStr,
)
- commitHash, stderr, err := process.GetManager().ExecDirEnv(5*time.Minute,
+ messageBytes := new(bytes.Buffer)
+ _, _ = messageBytes.WriteString(message)
+ _, _ = messageBytes.WriteString("\n")
+
+ args := []string{"commit-tree", treeHash, "-p", "HEAD"}
+ if version.Compare(binVersion, "2.0.0", ">=") {
+ args = append(args, "--no-gpg-sign")
+ }
+
+ commitHash, stderr, err := process.GetManager().ExecDirEnvStdIn(5*time.Minute,
t.basePath,
fmt.Sprintf("commitTree (git commit-tree): %s", t.basePath),
env,
- git.GitExecutable, "commit-tree", treeHash, "-p", "HEAD", "-m", message)
+ messageBytes,
+ git.GitExecutable, args...)
if err != nil {
return "", fmt.Errorf("git commit-tree: %s", stderr)
}
@@ -328,6 +345,12 @@ func (t *TemporaryUploadRepository) DiffIndex() (diff *gitdiff.Diff, err error)
// CheckAttribute checks the given attribute of the provided files
func (t *TemporaryUploadRepository) CheckAttribute(attribute string, args ...string) (map[string]map[string]string, error) {
+ binVersion, err := git.BinVersion()
+ if err != nil {
+ log.Error("Error retrieving git version: %v", err)
+ return nil, err
+ }
+
stdOut := new(bytes.Buffer)
stdErr := new(bytes.Buffer)
@@ -335,7 +358,14 @@ func (t *TemporaryUploadRepository) CheckAttribute(attribute string, args ...str
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
- cmdArgs := []string{"check-attr", "-z", attribute, "--cached", "--"}
+ cmdArgs := []string{"check-attr", "-z", attribute}
+
+ // git check-attr --cached first appears in git 1.7.8
+ if version.Compare(binVersion, "1.7.8", ">=") {
+ cmdArgs = append(cmdArgs, "--cached")
+ }
+ cmdArgs = append(cmdArgs, "--")
+
for _, arg := range args {
if arg != "" {
cmdArgs = append(cmdArgs, arg)
@@ -353,7 +383,7 @@ func (t *TemporaryUploadRepository) CheckAttribute(attribute string, args ...str
}
pid := process.GetManager().Add(desc, cmd)
- err := cmd.Wait()
+ err = cmd.Wait()
process.GetManager().Remove(pid)
if err != nil {