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/gitaly/diff.go')
-rw-r--r--workhorse/internal/gitaly/diff.go55
1 files changed, 55 insertions, 0 deletions
diff --git a/workhorse/internal/gitaly/diff.go b/workhorse/internal/gitaly/diff.go
new file mode 100644
index 00000000000..035a58ec6fd
--- /dev/null
+++ b/workhorse/internal/gitaly/diff.go
@@ -0,0 +1,55 @@
+package gitaly
+
+import (
+ "context"
+ "fmt"
+ "io"
+ "net/http"
+
+ "gitlab.com/gitlab-org/gitaly/proto/go/gitalypb"
+ "gitlab.com/gitlab-org/gitaly/streamio"
+)
+
+type DiffClient struct {
+ gitalypb.DiffServiceClient
+}
+
+func (client *DiffClient) SendRawDiff(ctx context.Context, w http.ResponseWriter, request *gitalypb.RawDiffRequest) error {
+ c, err := client.RawDiff(ctx, request)
+ if err != nil {
+ return fmt.Errorf("rpc failed: %v", err)
+ }
+
+ w.Header().Del("Content-Length")
+
+ rr := streamio.NewReader(func() ([]byte, error) {
+ resp, err := c.Recv()
+ return resp.GetData(), err
+ })
+
+ if _, err := io.Copy(w, rr); err != nil {
+ return fmt.Errorf("copy rpc data: %v", err)
+ }
+
+ return nil
+}
+
+func (client *DiffClient) SendRawPatch(ctx context.Context, w http.ResponseWriter, request *gitalypb.RawPatchRequest) error {
+ c, err := client.RawPatch(ctx, request)
+ if err != nil {
+ return fmt.Errorf("rpc failed: %v", err)
+ }
+
+ w.Header().Del("Content-Length")
+
+ rr := streamio.NewReader(func() ([]byte, error) {
+ resp, err := c.Recv()
+ return resp.GetData(), err
+ })
+
+ if _, err := io.Copy(w, rr); err != nil {
+ return fmt.Errorf("copy rpc data: %v", err)
+ }
+
+ return nil
+}