Skip to content

Commit 8eb6ad6

Browse files
committed
fix hanging issue
1 parent b1cd587 commit 8eb6ad6

File tree

1 file changed

+17
-16
lines changed

1 file changed

+17
-16
lines changed

routers/private/hook_pre_receive.go

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
package private
55

66
import (
7-
"bytes"
7+
"context"
88
"fmt"
99
"io"
1010
"net/http"
@@ -34,6 +34,7 @@ import (
3434
gitleaks_config "github.com/zricethezav/gitleaks/v8/config"
3535
gitleaks "github.com/zricethezav/gitleaks/v8/detect"
3636
gitleaks_log "github.com/zricethezav/gitleaks/v8/logging"
37+
"github.com/zricethezav/gitleaks/v8/report"
3738
)
3839

3940
type preReceiveContext struct {
@@ -569,7 +570,6 @@ func preReceiveSecrets(ctx *preReceiveContext, oldCommitID, newCommitID string,
569570
if newCommitID == ctx.Repo.GetObjectFormat().EmptyObjectID().String() {
570571
return
571572
}
572-
573573
var err error
574574
var detector *gitleaks.Detector
575575

@@ -592,32 +592,31 @@ func preReceiveSecrets(ctx *preReceiveContext, oldCommitID, newCommitID string,
592592
oldCommitID = ctx.Repo.GetObjectFormat().EmptyTree().String()
593593
}
594594
}
595+
var findings []report.Finding
595596

596-
stdout := &bytes.Buffer{}
597+
r, w, _ := os.Pipe()
597598
err = git.NewCommand("log", "-U0", "-p").AddDynamicArguments(oldCommitID+".."+newCommitID).Run(
598599
ctx,
599600
&git.RunOpts{
600601
Dir: repo.RepoPath(),
601602
Env: ctx.env,
602-
Stdout: stdout,
603+
Stdout: w,
604+
PipelineFunc: func(_ context.Context, _ context.CancelFunc) error {
605+
giteaCmd, err := newPreReceiveDiff(r)
606+
if err != nil {
607+
return err
608+
}
609+
w.Close()
610+
findings, err = detector.DetectGit(giteaCmd, gitleaks.NewRemoteInfo(scm.GitHubPlatform, repo.Website))
611+
return err
612+
},
603613
},
604614
)
605615
if err != nil {
606616
ctx.JSON(http.StatusTeapot, private.Response{Err: err.Error(), UserMsg: err.Error()})
607617
return
608618
}
609619

610-
giteaCmd, err := newPreReceiveDiff(stdout)
611-
if err != nil {
612-
ctx.JSON(http.StatusTeapot, private.Response{Err: err.Error(), UserMsg: err.Error()})
613-
return
614-
}
615-
findings, err := detector.DetectGit(giteaCmd, gitleaks.NewRemoteInfo(scm.GitHubPlatform, repo.Website))
616-
if err != nil {
617-
ctx.JSON(http.StatusTeapot, private.Response{Err: err.Error(), UserMsg: err.Error()})
618-
return
619-
}
620-
621620
if len(findings) != 0 {
622621
msg := strings.Builder{}
623622
msg.WriteString("This repository has secret detection enabled! Following secrets were detected:\n")
@@ -633,15 +632,17 @@ func preReceiveSecrets(ctx *preReceiveContext, oldCommitID, newCommitID string,
633632

634633
type giteacmd struct {
635634
diffCh <-chan *gitdiff.File
635+
closer io.Closer
636636
}
637637

638-
func newPreReceiveDiff(r io.Reader) (*giteacmd, error) {
638+
func newPreReceiveDiff(r io.ReadCloser) (*giteacmd, error) {
639639
diffCh, err := gitdiff.Parse(r)
640640
if err != nil {
641641
return nil, err
642642
}
643643
return &giteacmd{
644644
diffCh: diffCh,
645+
closer: r,
645646
}, nil
646647
}
647648

0 commit comments

Comments
 (0)