@@ -20,6 +20,7 @@ import (
2020 "code.gitea.io/gitea/modules/log"
2121 "code.gitea.io/gitea/modules/process"
2222 "code.gitea.io/gitea/modules/setting"
23+ "github.com/mcuadros/go-version"
2324)
2425
2526// TemporaryUploadRepository is a type to wrap our upload repositories as a shallow clone
@@ -263,11 +264,15 @@ func (t *TemporaryUploadRepository) CommitTree(author, committer *models.User, t
263264 "GIT_COMMITTER_EMAIL=" + committerSig .Email ,
264265 "GIT_COMMITTER_DATE=" + commitTimeStr ,
265266 )
266- commitHash , stderr , err := process .GetManager ().ExecDirEnv (5 * time .Minute ,
267+ messageBytes := new (bytes.Buffer )
268+ _ , _ = messageBytes .WriteString (message )
269+ _ , _ = messageBytes .WriteString ("\n " )
270+ commitHash , stderr , err := process .GetManager ().ExecDirEnvStdIn (5 * time .Minute ,
267271 t .basePath ,
268272 fmt .Sprintf ("commitTree (git commit-tree): %s" , t .basePath ),
269273 env ,
270- git .GitExecutable , "commit-tree" , treeHash , "-p" , "HEAD" , "-m" , message )
274+ messageBytes ,
275+ git .GitExecutable , "commit-tree" , treeHash , "-p" , "HEAD" )
271276 if err != nil {
272277 return "" , fmt .Errorf ("git commit-tree: %s" , stderr )
273278 }
@@ -327,14 +332,26 @@ func (t *TemporaryUploadRepository) DiffIndex() (diff *models.Diff, err error) {
327332
328333// CheckAttribute checks the given attribute of the provided files
329334func (t * TemporaryUploadRepository ) CheckAttribute (attribute string , args ... string ) (map [string ]map [string ]string , error ) {
335+ binVersion , err := git .BinVersion ()
336+ if err != nil {
337+ log .Fatal ("Error retrieving git version: %v" , err )
338+ }
339+
330340 stdOut := new (bytes.Buffer )
331341 stdErr := new (bytes.Buffer )
332342
333343 timeout := 5 * time .Minute
334344 ctx , cancel := context .WithTimeout (context .Background (), timeout )
335345 defer cancel ()
336346
337- cmdArgs := []string {"check-attr" , "-z" , attribute , "--cached" , "--" }
347+ cmdArgs := []string {"check-attr" , "-z" , attribute }
348+
349+ // git check-attr --cached first appears in git 1.8.0
350+ if version .Compare (binVersion , "1.8.0" , ">=" ) {
351+ cmdArgs = append (cmdArgs , "--cached" )
352+ }
353+ cmdArgs = append (cmdArgs , "--" )
354+
338355 for _ , arg := range args {
339356 if arg != "" {
340357 cmdArgs = append (cmdArgs , arg )
@@ -352,7 +369,7 @@ func (t *TemporaryUploadRepository) CheckAttribute(attribute string, args ...str
352369 }
353370
354371 pid := process .GetManager ().Add (desc , cmd )
355- err : = cmd .Wait ()
372+ err = cmd .Wait ()
356373 process .GetManager ().Remove (pid )
357374
358375 if err != nil {
0 commit comments