diff --git a/internal/config/config.go b/internal/config/config.go index 7aea9cf7..ea8ffd24 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -19,7 +19,7 @@ type Config struct { SourceDir string `mapstructure:"source_dir"` SourceDirLocal string `mapstructure:"source_dir_local"` Rc string `mapstructure:"rc,omitempty"` - SkipOutput []string `mapstructure:"skip_output,omitempty"` + SkipOutput interface{} `mapstructure:"skip_output,omitempty"` Extends []string `mapstructure:"extends,omitempty"` NoTTY bool `mapstructure:"no_tty,omitempty"` AssertLefthookInstalled bool `mapstructure:"assert_lefthook_installed,omitempty"` diff --git a/internal/lefthook/run.go b/internal/lefthook/run.go index 0fec2287..a48f2876 100644 --- a/internal/lefthook/run.go +++ b/internal/lefthook/run.go @@ -8,7 +8,6 @@ import ( "os/signal" "path/filepath" "slices" - "strings" "time" "github.com/evilmartians/lefthook/internal/config" @@ -61,6 +60,7 @@ func (l *Lefthook) Run(hookName string, args RunArgs, gitArgs []string) error { return err } + if err = cfg.Validate(); err != nil { return err } @@ -73,14 +73,10 @@ func (l *Lefthook) Run(hookName string, args RunArgs, gitArgs []string) error { log.SetLevel(log.WarnLevel) } - if tags := os.Getenv(envSkipOutput); tags != "" { - cfg.SkipOutput = append(cfg.SkipOutput, strings.Split(tags, ",")...) - } + tags := os.Getenv(envSkipOutput) var logSettings log.SkipSettings - for _, skipOption := range cfg.SkipOutput { - (&logSettings).ApplySetting(skipOption) - } + (&logSettings).ApplySkipSettings(tags, cfg.SkipOutput) if !logSettings.SkipMeta() { log.Box( diff --git a/internal/log/skip_settings.go b/internal/log/skip_settings.go index cf3527ea..ac3bcc88 100644 --- a/internal/log/skip_settings.go +++ b/internal/log/skip_settings.go @@ -1,5 +1,7 @@ package log +import "strings" + const ( skipMeta = 1 << iota skipSuccess @@ -10,6 +12,7 @@ const ( skipExecutionOutput skipExecutionInfo skipEmptySummary + skipAll = (1 << iota) - 1 ) type SkipSettings int16 @@ -37,6 +40,29 @@ func (s *SkipSettings) ApplySetting(setting string) { } } +func (s *SkipSettings) ApplySkipSettings(tags string, skipOutput interface{}) { + switch typedSkipOutput := skipOutput.(type) { + case bool: + s.SkipAll(typedSkipOutput) + case []string: + if tags != "" { + typedSkipOutput = append(typedSkipOutput, strings.Split(tags, ",")...) + } + for _, skipOption := range typedSkipOutput { + s.ApplySetting(skipOption) + } + } +} + +func (s *SkipSettings) SkipAll(val bool) { + if val == true { + *s = skipAll &^ skipFailure + } else { + *s = 0 + } + return +} + func (s SkipSettings) SkipSuccess() bool { return s.doSkip(skipSuccess) }