diff --git a/modules/git/blame.go b/modules/git/blame.go index ec88accb1..4bd13dc32 100644 --- a/modules/git/blame.go +++ b/modules/git/blame.go @@ -5,11 +5,14 @@ package git import ( "bufio" + "bytes" "context" "fmt" "io" "os" "regexp" + + "code.gitea.io/gitea/modules/log" ) // BlamePart represents block of blame - continuous lines with one sha @@ -115,15 +118,19 @@ func CreateBlameReader(ctx context.Context, repoPath, commitID, file string) (*B done := make(chan error, 1) go func(cmd *Command, dir string, stdout io.WriteCloser, done chan error) { - if err := cmd.Run(&RunOpts{ + stderr := bytes.Buffer{} + // TODO: it doesn't work for directories (the directories shouldn't be "blamed"), and the "err" should be returned by "Read" but not by "Close" + err := cmd.Run(&RunOpts{ UseContextTimeout: true, Dir: dir, Stdout: stdout, - Stderr: os.Stderr, - }); err == nil { - stdout.Close() - } + Stderr: &stderr, + }) done <- err + _ = stdout.Close() + if err != nil { + log.Error("Error running git blame (dir: %v): %v, stderr: %v", repoPath, err, stderr.String()) + } }(cmd, repoPath, stdout, done) bufferedReader := bufio.NewReader(reader)