diff options
Diffstat (limited to 'workhorse/internal/git/diff.go')
-rw-r--r-- | workhorse/internal/git/diff.go | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/workhorse/internal/git/diff.go b/workhorse/internal/git/diff.go new file mode 100644 index 00000000000..b1a1c17a650 --- /dev/null +++ b/workhorse/internal/git/diff.go @@ -0,0 +1,48 @@ +package git + +import ( + "fmt" + "net/http" + + "gitlab.com/gitlab-org/gitaly/proto/go/gitalypb" + + "gitlab.com/gitlab-org/gitlab-workhorse/internal/gitaly" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper" + "gitlab.com/gitlab-org/gitlab-workhorse/internal/senddata" +) + +type diff struct{ senddata.Prefix } +type diffParams struct { + GitalyServer gitaly.Server + RawDiffRequest string +} + +var SendDiff = &diff{"git-diff:"} + +func (d *diff) Inject(w http.ResponseWriter, r *http.Request, sendData string) { + var params diffParams + if err := d.Unpack(¶ms, sendData); err != nil { + helper.Fail500(w, r, fmt.Errorf("SendDiff: unpack sendData: %v", err)) + return + } + + request := &gitalypb.RawDiffRequest{} + if err := gitaly.UnmarshalJSON(params.RawDiffRequest, request); err != nil { + helper.Fail500(w, r, fmt.Errorf("diff.RawDiff: %v", err)) + return + } + + ctx, diffClient, err := gitaly.NewDiffClient(r.Context(), params.GitalyServer) + if err != nil { + helper.Fail500(w, r, fmt.Errorf("diff.RawDiff: %v", err)) + return + } + + if err := diffClient.SendRawDiff(ctx, w, request); err != nil { + helper.LogError( + r, + ©Error{fmt.Errorf("diff.RawDiff: request=%v, err=%v", request, err)}, + ) + return + } +} |