summaryrefslogtreecommitdiff
path: root/workhorse/internal/git/format-patch.go
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-12-17 11:59:07 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-12-17 11:59:07 +0000
commit8b573c94895dc0ac0e1d9d59cf3e8745e8b539ca (patch)
tree544930fb309b30317ae9797a9683768705d664c4 /workhorse/internal/git/format-patch.go
parent4b1de649d0168371549608993deac953eb692019 (diff)
downloadgitlab-ce-8b573c94895dc0ac0e1d9d59cf3e8745e8b539ca.tar.gz
Add latest changes from gitlab-org/gitlab@13-7-stable-eev13.7.0-rc42
Diffstat (limited to 'workhorse/internal/git/format-patch.go')
-rw-r--r--workhorse/internal/git/format-patch.go48
1 files changed, 48 insertions, 0 deletions
diff --git a/workhorse/internal/git/format-patch.go b/workhorse/internal/git/format-patch.go
new file mode 100644
index 00000000000..db96029b07e
--- /dev/null
+++ b/workhorse/internal/git/format-patch.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 patch struct{ senddata.Prefix }
+type patchParams struct {
+ GitalyServer gitaly.Server
+ RawPatchRequest string
+}
+
+var SendPatch = &patch{"git-format-patch:"}
+
+func (p *patch) Inject(w http.ResponseWriter, r *http.Request, sendData string) {
+ var params patchParams
+ if err := p.Unpack(&params, sendData); err != nil {
+ helper.Fail500(w, r, fmt.Errorf("SendPatch: unpack sendData: %v", err))
+ return
+ }
+
+ request := &gitalypb.RawPatchRequest{}
+ if err := gitaly.UnmarshalJSON(params.RawPatchRequest, request); err != nil {
+ helper.Fail500(w, r, fmt.Errorf("diff.RawPatch: %v", err))
+ return
+ }
+
+ ctx, diffClient, err := gitaly.NewDiffClient(r.Context(), params.GitalyServer)
+ if err != nil {
+ helper.Fail500(w, r, fmt.Errorf("diff.RawPatch: %v", err))
+ return
+ }
+
+ if err := diffClient.SendRawPatch(ctx, w, request); err != nil {
+ helper.LogError(
+ r,
+ &copyError{fmt.Errorf("diff.RawPatch: request=%v, err=%v", request, err)},
+ )
+ return
+ }
+}