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:
authorPaul Okstad <pokstad@gitlab.com>2020-11-11 10:45:46 +0300
committerPaul Okstad <pokstad@gitlab.com>2020-11-11 10:45:46 +0300
commitb1a60e685cfc16ac1f5fe40723a06f3b5edccb05 (patch)
tree3dd92040ed1716049e698d9679dc7193280096d8
parentfe5b51db143800377cffbf2f64ef5b137ae5cfe3 (diff)
Ref tx hook overridepo-ref-hook-tx-override
-rw-r--r--internal/git/hooks.go17
-rw-r--r--internal/git/safecmd.go5
2 files changed, 20 insertions, 2 deletions
diff --git a/internal/git/hooks.go b/internal/git/hooks.go
index 97099b859..5d3004f6a 100644
--- a/internal/git/hooks.go
+++ b/internal/git/hooks.go
@@ -20,6 +20,10 @@ var jsonpbMarshaller = &jsonpb.Marshaler{}
// repository changes that may possibly update references
func WithRefTxHook(ctx context.Context, repo *gitalypb.Repository, cfg config.Cfg) CmdOpt {
return func(cc *cmdCfg) error {
+ if cc.refHookOverriden {
+ return errors.New("ref tx hook provided, but already overriden")
+ }
+
if repo == nil {
return fmt.Errorf("missing repo: %w", ErrInvalidArg)
}
@@ -36,6 +40,19 @@ func WithRefTxHook(ctx context.Context, repo *gitalypb.Repository, cfg config.Cf
}
}
+// WithOverrideRefTxHook returns an option that indicates the command should not
+// require a ref hook. This option should only be used in cases where the git
+// command does not alter references.
+func WithOverrideRefTxHook() CmdOpt {
+ return func(cc *cmdCfg) error {
+ if cc.refHookConfigured {
+ return errors.New("ref tx hook override provided, but already configured")
+ }
+ cc.refHookOverriden = true
+ return nil
+ }
+}
+
// refHookEnv returns all env vars required by the reference transaction hook
func refHookEnv(ctx context.Context, repo *gitalypb.Repository, cfg config.Cfg) ([]string, error) {
repoJSON, err := jsonpbMarshaller.MarshalToString(repo)
diff --git a/internal/git/safecmd.go b/internal/git/safecmd.go
index d7f011a51..bb7f34b81 100644
--- a/internal/git/safecmd.go
+++ b/internal/git/safecmd.go
@@ -229,6 +229,7 @@ type cmdCfg struct {
stdout io.Writer
stderr io.Writer
refHookConfigured bool
+ refHookOverridden bool
}
// CmdOpt is an option for running a command
@@ -274,10 +275,10 @@ func handleOpts(ctx context.Context, sc Cmd, cc *cmdCfg, opts []CmdOpt) error {
}
}
- if !cc.refHookConfigured && mayUpdateRef(sc.Subcommand()) {
+ if !cc.refHookConfigured && !cc.refHookOverridden && mayUpdateRef(sc.Subcommand()) {
return fmt.Errorf("subcommand %q: %w", sc.Subcommand(), ErrRefHookRequired)
}
- if cc.refHookConfigured && !mayUpdateRef(sc.Subcommand()) {
+ if cc.refHookConfigured && (!mayUpdateRef(sc.Subcommand()) || cc.refHookOverridden) {
return fmt.Errorf("subcommand %q: %w", sc.Subcommand(), ErrRefHookNotRequired)
}