Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Cai <jcai@gitlab.com>2022-06-03 17:48:10 +0300
committerJohn Cai <jcai@gitlab.com>2022-06-15 18:33:49 +0300
commit14a2fb7235028cd9c5287655f99688a75cadcbb0 (patch)
tree81309c8005318afc7ef75ce9b4885f5340c33ba9
parente42bcdc71bcd1118b1b0a6671e33293941865aea (diff)
gitaly-hooks: Pass in user details to call to PackObjectsHookjc-pass-user-details-to-pack-objects
Now that we have access to the user_id, username, and protocol, we can pass these values into the request to PackObjectsHookWithSidechannel
-rw-r--r--cmd/gitaly-hooks/hooks.go36
1 files changed, 35 insertions, 1 deletions
diff --git a/cmd/gitaly-hooks/hooks.go b/cmd/gitaly-hooks/hooks.go
index 5a56464c8..10a0d2514 100644
--- a/cmd/gitaly-hooks/hooks.go
+++ b/cmd/gitaly-hooks/hooks.go
@@ -25,6 +25,7 @@ import (
"gitlab.com/gitlab-org/gitaly/v15/streamio"
"gitlab.com/gitlab-org/labkit/tracing"
"google.golang.org/grpc"
+ "google.golang.org/grpc/metadata"
)
type hookError struct {
@@ -387,9 +388,42 @@ func handlePackObjectsWithSidechannel(ctx context.Context, payload git.HooksPayl
}
defer wt.Close()
+ var glID, glUsername, gitProtocol string
+
+ // TODO: remove this conditional in 15.2.
+ // Since the git2go binary is replaced before the gitaly binary, there
+ // is a period of time during an upgrade when the gitaly binary is older
+ // than the corresponding git2go binary, which means gitaly will still
+ // be sending ReceiveHooksPayload until the upgrade is finished.
+ if payload.UserDetails != nil {
+ glID = payload.UserDetails.UserID
+ glUsername = payload.UserDetails.Username
+ gitProtocol = payload.UserDetails.Protocol
+ } else {
+ glID = payload.ReceiveHooksPayload.UserID
+ glUsername = payload.ReceiveHooksPayload.Username
+ gitProtocol = payload.ReceiveHooksPayload.Protocol
+ }
+
+ ctx = metadata.AppendToOutgoingContext(
+ ctx,
+ "user_id",
+ glID,
+ "username",
+ glUsername,
+ "protocol",
+ gitProtocol,
+ )
+
if _, err := hookClient.PackObjectsHookWithSidechannel(
ctx,
- &gitalypb.PackObjectsHookWithSidechannelRequest{Repository: payload.Repo, Args: args},
+ &gitalypb.PackObjectsHookWithSidechannelRequest{
+ Repository: payload.Repo,
+ Args: args,
+ GlId: glID,
+ GlUsername: glUsername,
+ GitProtocol: gitProtocol,
+ },
); err != nil {
return fmt.Errorf("call PackObjectsHookWithSidechannel: %w", err)
}