diff options
author | Patrick Steinhardt <psteinhardt@gitlab.com> | 2023-09-06 13:26:16 +0300 |
---|---|---|
committer | Patrick Steinhardt <psteinhardt@gitlab.com> | 2023-09-07 09:34:57 +0300 |
commit | 796b888a64dd5027301d3e3836e53caa7d185368 (patch) | |
tree | 5469af9f8e95249013198cdb9d5c1699fb958242 /client | |
parent | 77014bc3b7d9e9dbcc69fd102b3b5c84e0a1086b (diff) |
client: Split out Gitaly-specific client logic
Split out Gitaly-specific client logic for SSHReceivePack, SSHUploadPack
and SSHUploadArchive. This is the last remaining part to ensure that
none of our own internal packages use the public `client` package.
Diffstat (limited to 'client')
-rw-r--r-- | client/receive_pack.go | 31 | ||||
-rw-r--r-- | client/upload_archive.go | 31 | ||||
-rw-r--r-- | client/upload_pack.go | 62 |
3 files changed, 8 insertions, 116 deletions
diff --git a/client/receive_pack.go b/client/receive_pack.go index c59f87d06..2d8d68e44 100644 --- a/client/receive_pack.go +++ b/client/receive_pack.go @@ -4,39 +4,12 @@ import ( "context" "io" - "gitlab.com/gitlab-org/gitaly/v16/internal/stream" + "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/gitalyclient" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" - "gitlab.com/gitlab-org/gitaly/v16/streamio" "google.golang.org/grpc" ) // ReceivePack proxies an SSH git-receive-pack (git push) session to Gitaly func ReceivePack(ctx context.Context, conn *grpc.ClientConn, stdin io.Reader, stdout, stderr io.Writer, req *gitalypb.SSHReceivePackRequest) (int32, error) { - ctx2, cancel := context.WithCancel(ctx) - defer cancel() - - ssh := gitalypb.NewSSHServiceClient(conn) - receivePackStream, err := ssh.SSHReceivePack(ctx2) - if err != nil { - return 0, err - } - - if err = receivePackStream.Send(req); err != nil { - return 0, err - } - - inWriter := streamio.NewWriter(func(p []byte) error { - return receivePackStream.Send(&gitalypb.SSHReceivePackRequest{Stdin: p}) - }) - - return stream.Handler(func() (stream.StdoutStderrResponse, error) { - return receivePackStream.Recv() - }, func(errC chan error) { - _, errRecv := io.Copy(inWriter, stdin) - if err := receivePackStream.CloseSend(); err != nil && errRecv == nil { - errC <- err - } else { - errC <- errRecv - } - }, stdout, stderr) + return gitalyclient.ReceivePack(ctx, conn, stdin, stdout, stderr, req) } diff --git a/client/upload_archive.go b/client/upload_archive.go index 654e7c583..572e6bc9b 100644 --- a/client/upload_archive.go +++ b/client/upload_archive.go @@ -4,39 +4,12 @@ import ( "context" "io" - "gitlab.com/gitlab-org/gitaly/v16/internal/stream" + "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/gitalyclient" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" - "gitlab.com/gitlab-org/gitaly/v16/streamio" "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 *gitalypb.SSHUploadArchiveRequest) (int32, error) { - ctx2, cancel := context.WithCancel(ctx) - defer cancel() - - ssh := gitalypb.NewSSHServiceClient(conn) - uploadPackStream, err := ssh.SSHUploadArchive(ctx2) - if err != nil { - return 0, err - } - - if err = uploadPackStream.Send(req); err != nil { - return 0, err - } - - inWriter := streamio.NewWriter(func(p []byte) error { - return uploadPackStream.Send(&gitalypb.SSHUploadArchiveRequest{Stdin: p}) - }) - - return stream.Handler(func() (stream.StdoutStderrResponse, error) { - return uploadPackStream.Recv() - }, func(errC chan error) { - _, errRecv := io.Copy(inWriter, stdin) - if err := uploadPackStream.CloseSend(); err != nil && errRecv == nil { - errC <- err - } else { - errC <- errRecv - } - }, stdout, stderr) + return gitalyclient.UploadArchive(ctx, conn, stdin, stdout, stderr, req) } diff --git a/client/upload_pack.go b/client/upload_pack.go index 65d81746e..4ad17dcb4 100644 --- a/client/upload_pack.go +++ b/client/upload_pack.go @@ -4,48 +4,18 @@ import ( "context" "io" - "gitlab.com/gitlab-org/gitaly/v16/internal/stream" + "gitlab.com/gitlab-org/gitaly/v16/internal/gitaly/gitalyclient" "gitlab.com/gitlab-org/gitaly/v16/proto/go/gitalypb" - "gitlab.com/gitlab-org/gitaly/v16/streamio" "google.golang.org/grpc" ) // UploadPack proxies an SSH git-upload-pack (git fetch) session to Gitaly func UploadPack(ctx context.Context, conn *grpc.ClientConn, stdin io.Reader, stdout, stderr io.Writer, req *gitalypb.SSHUploadPackRequest) (int32, error) { - ctx2, cancel := context.WithCancel(ctx) - defer cancel() - - ssh := gitalypb.NewSSHServiceClient(conn) - uploadPackStream, err := ssh.SSHUploadPack(ctx2) - if err != nil { - return 0, err - } - - if err = uploadPackStream.Send(req); err != nil { - return 0, err - } - - inWriter := streamio.NewWriter(func(p []byte) error { - return uploadPackStream.Send(&gitalypb.SSHUploadPackRequest{Stdin: p}) - }) - - return stream.Handler(func() (stream.StdoutStderrResponse, error) { - return uploadPackStream.Recv() - }, func(errC chan error) { - _, errRecv := io.Copy(inWriter, stdin) - if err := uploadPackStream.CloseSend(); err != nil && errRecv == nil { - errC <- err - } else { - errC <- errRecv - } - }, stdout, stderr) + return gitalyclient.UploadPack(ctx, conn, stdin, stdout, stderr, req) } // UploadPackResult wraps ExitCode and PackfileNegotiationStatistics. -type UploadPackResult struct { - ExitCode int32 - PackfileNegotiationStatistics *gitalypb.PackfileNegotiationStatistics -} +type UploadPackResult = gitalyclient.UploadPackResult // UploadPackWithSidechannelWithResult proxies an SSH git-upload-pack (git fetch) // session to Gitaly using a sidechannel for the raw data transfer. @@ -57,31 +27,7 @@ func UploadPackWithSidechannelWithResult( stdout, stderr io.Writer, req *gitalypb.SSHUploadPackWithSidechannelRequest, ) (UploadPackResult, error) { - result := UploadPackResult{} - ctx, cancel := context.WithCancel(ctx) - defer cancel() - - ctx, wt := reg.Register(ctx, func(c SidechannelConn) error { - return stream.ProxyPktLine(c, stdin, stdout, stderr) - }) - defer func() { - // We aleady check the error further down. - _ = wt.Close() - }() - - sshClient := gitalypb.NewSSHServiceClient(conn) - resp, err := sshClient.SSHUploadPackWithSidechannel(ctx, req) - if err != nil { - return result, err - } - result.ExitCode = 0 - result.PackfileNegotiationStatistics = resp.PackfileNegotiationStatistics - - if err := wt.Close(); err != nil { - return result, err - } - - return result, nil + return gitalyclient.UploadPackWithSidechannel(ctx, conn, reg.registry, stdin, stdout, stderr, req) } // UploadPackWithSidechannel proxies an SSH git-upload-pack (git fetch) |