summaryrefslogtreecommitdiff
path: root/workhorse/internal/git/receive-pack.go
diff options
context:
space:
mode:
Diffstat (limited to 'workhorse/internal/git/receive-pack.go')
-rw-r--r--workhorse/internal/git/receive-pack.go33
1 files changed, 33 insertions, 0 deletions
diff --git a/workhorse/internal/git/receive-pack.go b/workhorse/internal/git/receive-pack.go
new file mode 100644
index 00000000000..e72d8be5174
--- /dev/null
+++ b/workhorse/internal/git/receive-pack.go
@@ -0,0 +1,33 @@
+package git
+
+import (
+ "fmt"
+ "net/http"
+
+ "gitlab.com/gitlab-org/gitlab-workhorse/internal/api"
+ "gitlab.com/gitlab-org/gitlab-workhorse/internal/gitaly"
+ "gitlab.com/gitlab-org/gitlab-workhorse/internal/helper"
+)
+
+// Will not return a non-nil error after the response body has been
+// written to.
+func handleReceivePack(w *HttpResponseWriter, r *http.Request, a *api.Response) error {
+ action := getService(r)
+ writePostRPCHeader(w, action)
+
+ cr, cw := helper.NewWriteAfterReader(r.Body, w)
+ defer cw.Flush()
+
+ gitProtocol := r.Header.Get("Git-Protocol")
+
+ ctx, smarthttp, err := gitaly.NewSmartHTTPClient(r.Context(), a.GitalyServer)
+ if err != nil {
+ return fmt.Errorf("smarthttp.ReceivePack: %v", err)
+ }
+
+ if err := smarthttp.ReceivePack(ctx, &a.Repository, a.GL_ID, a.GL_USERNAME, a.GL_REPOSITORY, a.GitConfigOptions, cr, cw, gitProtocol); err != nil {
+ return fmt.Errorf("smarthttp.ReceivePack: %v", err)
+ }
+
+ return nil
+}