diff options
author | Christian Couder <chriscool@tuxfamily.org> | 2020-10-13 12:36:10 +0300 |
---|---|---|
committer | Christian Couder <chriscool@tuxfamily.org> | 2020-10-19 22:42:07 +0300 |
commit | 1b73c5ae817aa5ca9528c6312d002f537328a7c9 (patch) | |
tree | 94e092f368393c4278e228c14ea2edf9eee03f93 /internal/gitaly/service/operations/merge.go | |
parent | cc507ea655e2cf94731e3ae1f696804cac2402e0 (diff) |
Invoke the reference-transaction hook
Diffstat (limited to 'internal/gitaly/service/operations/merge.go')
-rw-r--r-- | internal/gitaly/service/operations/merge.go | 36 |
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 |