summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--vendor/code.gitea.io/git/commit_info.go12
-rw-r--r--vendor/vendor.json6
2 files changed, 15 insertions, 3 deletions
diff --git a/vendor/code.gitea.io/git/commit_info.go b/vendor/code.gitea.io/git/commit_info.go
index 106ebc618f..6b42b57c90 100644
--- a/vendor/code.gitea.io/git/commit_info.go
+++ b/vendor/code.gitea.io/git/commit_info.go
@@ -207,6 +207,10 @@ func getCommitsInfo(state *getCommitsInfoState) error {
if err := cmd.Start(); err != nil {
return err
}
+ // it's okay to ignore the error returned by cmd.Wait(); we expect the
+ // subprocess to sometimes have a non-zero exit status, since we may
+ // prematurely close stdout, resulting in a broken pipe.
+ defer cmd.Wait()
numThreads := runtime.NumCPU()
done := make(chan error, numThreads)
@@ -216,6 +220,14 @@ func getCommitsInfo(state *getCommitsInfoState) error {
scanner := bufio.NewScanner(readCloser)
err = state.processGitLogOutput(scanner)
+
+ // it is important that we close stdout here; if we do not close
+ // stdout, the subprocess will keep running, and the deffered call
+ // cmd.Wait() may block for a long time.
+ if closeErr := readCloser.Close(); closeErr != nil && err == nil {
+ err = closeErr
+ }
+
for i := 0; i < numThreads; i++ {
doneErr := <-done
if doneErr != nil && err == nil {
diff --git a/vendor/vendor.json b/vendor/vendor.json
index e65aa3969c..3689f57b66 100644
--- a/vendor/vendor.json
+++ b/vendor/vendor.json
@@ -3,10 +3,10 @@
"ignore": "test appengine",
"package": [
{
- "checksumSHA1": "4OG03XZWTU5eUkWPTOwIB6H4BF0=",
+ "checksumSHA1": "Em29XiKkOh5rFFXdkCjqqsQ7fe4=",
"path": "code.gitea.io/git",
- "revision": "4573c63ec9c8257caf11e361c238b6ceb53781d7",
- "revisionTime": "2017-12-20T02:56:39Z"
+ "revision": "4ec3654064ef7eef4f05f891073a38039ad8d0f7",
+ "revisionTime": "2017-12-22T02:43:26Z"
},
{
"checksumSHA1": "QQ7g7B9+EIzGjO14KCGEs9TNEzM=",