summaryrefslogtreecommitdiff
path: root/go/vendor/gitlab.com/gitlab-org/gitaly/client/upload_archive.go
diff options
context:
space:
mode:
Diffstat (limited to 'go/vendor/gitlab.com/gitlab-org/gitaly/client/upload_archive.go')
-rw-r--r--go/vendor/gitlab.com/gitlab-org/gitaly/client/upload_archive.go40
1 files changed, 40 insertions, 0 deletions
diff --git a/go/vendor/gitlab.com/gitlab-org/gitaly/client/upload_archive.go b/go/vendor/gitlab.com/gitlab-org/gitaly/client/upload_archive.go
new file mode 100644
index 0000000..6b4d682
--- /dev/null
+++ b/go/vendor/gitlab.com/gitlab-org/gitaly/client/upload_archive.go
@@ -0,0 +1,40 @@
+package client
+
+import (
+ "io"
+
+ "gitlab.com/gitlab-org/gitaly/streamio"
+
+ pb "gitlab.com/gitlab-org/gitaly-proto/go"
+
+ "golang.org/x/net/context"
+ "google.golang.org/grpc"
+)
+
+// UploadArchive proxies an SSH git-upload-archive (git archive --remote) session to Gitaly
+func UploadArchive(ctx context.Context, conn *grpc.ClientConn, stdin io.Reader, stdout, stderr io.Writer, req *pb.SSHUploadArchiveRequest) (int32, error) {
+ ctx2, cancel := context.WithCancel(ctx)
+ defer cancel()
+
+ ssh := pb.NewSSHServiceClient(conn)
+ stream, err := ssh.SSHUploadArchive(ctx2)
+ if err != nil {
+ return 0, err
+ }
+
+ if err = stream.Send(req); err != nil {
+ return 0, err
+ }
+
+ inWriter := streamio.NewWriter(func(p []byte) error {
+ return stream.Send(&pb.SSHUploadArchiveRequest{Stdin: p})
+ })
+
+ return streamHandler(func() (stdoutStderrResponse, error) {
+ return stream.Recv()
+ }, func(errC chan error) {
+ _, errRecv := io.Copy(inWriter, stdin)
+ stream.CloseSend()
+ errC <- errRecv
+ }, stdout, stderr)
+}