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:
authorChristian Couder <chriscool@tuxfamily.org>2020-10-13 12:36:10 +0300
committerChristian Couder <chriscool@tuxfamily.org>2020-10-19 22:42:07 +0300
commit1b73c5ae817aa5ca9528c6312d002f537328a7c9 (patch)
tree94e092f368393c4278e228c14ea2edf9eee03f93 /internal/gitaly/service/operations/merge.go
parentcc507ea655e2cf94731e3ae1f696804cac2402e0 (diff)
Invoke the reference-transaction hook
Diffstat (limited to 'internal/gitaly/service/operations/merge.go')
-rw-r--r--internal/gitaly/service/operations/merge.go36
1 files changed, 36 insertions, 0 deletions
diff --git a/internal/gitaly/service/operations/merge.go b/internal/gitaly/service/operations/merge.go
index 5568872b8..194d48786 100644
--- a/internal/gitaly/service/operations/merge.go
+++ b/internal/gitaly/service/operations/merge.go
@@ -13,11 +13,13 @@ import (
"gitlab.com/gitlab-org/gitaly/internal/git/updateref"
"gitlab.com/gitlab-org/gitaly/internal/git2go"
"gitlab.com/gitlab-org/gitaly/internal/gitaly/config"
+ "gitlab.com/gitlab-org/gitaly/internal/gitaly/hook"
"gitlab.com/gitlab-org/gitaly/internal/gitaly/rubyserver"
"gitlab.com/gitlab-org/gitaly/internal/gitlabshell"
"gitlab.com/gitlab-org/gitaly/internal/helper"
"gitlab.com/gitlab-org/gitaly/internal/helper/text"
"gitlab.com/gitlab-org/gitaly/internal/metadata/featureflag"
+ "gitlab.com/gitlab-org/gitaly/internal/praefect/metadata"
"gitlab.com/gitlab-org/gitaly/proto/go/gitalypb"
)
@@ -125,6 +127,32 @@ func (s *server) updateReferenceWithHooks(ctx context.Context, repo *gitalypb.Re
fmt.Sprintf("GITALY_TOKEN=%s", s.cfg.Auth.Token),
}, gitlabshellEnv...)
+ transaction, err := metadata.TransactionFromContext(ctx)
+ if err != nil {
+ if err != metadata.ErrTransactionNotFound {
+ return err
+ }
+ }
+
+ if err == nil {
+ praefect, err := metadata.PraefectFromContext(ctx)
+ if err != nil {
+ return err
+ }
+
+ transactionEnv, err := transaction.Env()
+ if err != nil {
+ return err
+ }
+
+ praefectEnv, err := praefect.Env()
+ if err != nil {
+ return err
+ }
+
+ env = append(env, transactionEnv, praefectEnv)
+ }
+
changes := fmt.Sprintf("%s %s %s\n", oldrev, newrev, reference)
var stdout, stderr bytes.Buffer
@@ -135,6 +163,14 @@ func (s *server) updateReferenceWithHooks(ctx context.Context, repo *gitalypb.Re
return preReceiveError{message: stdout.String()}
}
+ // For backwards compatibility with Ruby, we need to only call the reference-transaction
+ // hook if the corresponding Ruby feature flag is set.
+ if featureflag.IsEnabled(ctx, featureflag.RubyReferenceTransactionHook) {
+ if err := s.hookManager.ReferenceTransactionHook(ctx, hook.ReferenceTransactionPrepared, env, strings.NewReader(changes)); err != nil {
+ return preReceiveError{message: stdout.String()}
+ }
+ }
+
updater, err := updateref.New(ctx, repo)
if err != nil {
return err