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/upload_pack.go | |
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/upload_pack.go')
-rw-r--r-- | client/upload_pack.go | 62 |
1 files changed, 4 insertions, 58 deletions
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) |