Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'workhorse/internal/git/diff.go')
-rw-r--r--workhorse/internal/git/diff.go48
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(&params, 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,
+ &copyError{fmt.Errorf("diff.RawDiff: request=%v, err=%v", request, err)},
+ )
+ return
+ }
+}