diff --git a/cmd/add.go b/cmd/add.go index 871727ba..3b2851e8 100644 --- a/cmd/add.go +++ b/cmd/add.go @@ -2,8 +2,10 @@ package cmd import ( _ "embed" + "sort" "github.com/spf13/cobra" + "golang.org/x/exp/maps" "github.com/evilmartians/lefthook/internal/config" "github.com/evilmartians/lefthook/internal/lefthook" @@ -22,7 +24,8 @@ func (add) New(opts *lefthook.Options) *cobra.Command { if len(args) != 0 { return } - ret = config.AvailableHooks[:] + ret = maps.Keys(config.AvailableHooks) + sort.Strings(ret) return } diff --git a/cmd/run.go b/cmd/run.go index c7b48615..0fa18e2d 100644 --- a/cmd/run.go +++ b/cmd/run.go @@ -1,7 +1,10 @@ package cmd import ( + "sort" + "github.com/spf13/cobra" + "golang.org/x/exp/maps" "github.com/evilmartians/lefthook/internal/config" "github.com/evilmartians/lefthook/internal/lefthook" @@ -19,7 +22,9 @@ func (run) New(opts *lefthook.Options) *cobra.Command { return } ret = lefthook.ConfigHookCompletions(opts) - ret = append(ret, config.AvailableHooks[:]...) + other := maps.Keys(config.AvailableHooks) + sort.Strings(other) + ret = append(ret, other...) return } diff --git a/internal/config/available_hooks.go b/internal/config/available_hooks.go index 551d4d05..17e208f5 100644 --- a/internal/config/available_hooks.go +++ b/internal/config/available_hooks.go @@ -7,36 +7,36 @@ const ChecksumFileName = "lefthook.checksum" const GhostHookName = "prepare-commit-msg" // AvailableHooks - list of hooks taken from https://git-scm.com/docs/githooks. -var AvailableHooks = [...]string{ - "pre-commit", - "pre-push", - "commit-msg", - "applypatch-msg", - "fsmonitor-watchman", - "p4-changelist", - "p4-post-changelist", - "p4-pre-submit", - "p4-prepare-changelist", - "post-applypatch", - "post-checkout", - "post-commit", - "post-index-change", - "post-merge", - "post-receive", - "post-rewrite", - "post-update", - "pre-applypatch", - "pre-auto-gc", - "pre-merge-commit", - "pre-rebase", - "pre-receive", - "prepare-commit-msg", - "proc-receive", - "push-to-checkout", - "rebase", - "reference-transaction", - "sendemail-validate", - "update", +var AvailableHooks = map[string]struct{}{ + "pre-commit": {}, + "pre-push": {}, + "commit-msg": {}, + "applypatch-msg": {}, + "fsmonitor-watchman": {}, + "p4-changelist": {}, + "p4-post-changelist": {}, + "p4-pre-submit": {}, + "p4-prepare-changelist": {}, + "post-applypatch": {}, + "post-checkout": {}, + "post-commit": {}, + "post-index-change": {}, + "post-merge": {}, + "post-receive": {}, + "post-rewrite": {}, + "post-update": {}, + "pre-applypatch": {}, + "pre-auto-gc": {}, + "pre-merge-commit": {}, + "pre-rebase": {}, + "pre-receive": {}, + "prepare-commit-msg": {}, + "proc-receive": {}, + "push-to-checkout": {}, + "rebase": {}, + "reference-transaction": {}, + "sendemail-validate": {}, + "update": {}, } func HookUsesStagedFiles(hook string) bool { @@ -47,12 +47,7 @@ func HookUsesPushFiles(hook string) bool { return hook == "pre-push" } -func HookAvailable(hook string) bool { - for _, name := range AvailableHooks { - if name == hook { - return true - } - } - - return false +func KnownHook(hook string) bool { + _, ok := AvailableHooks[hook] + return ok } diff --git a/internal/config/load.go b/internal/config/load.go index 92c4aa26..e8f0fb98 100644 --- a/internal/config/load.go +++ b/internal/config/load.go @@ -280,7 +280,7 @@ func mergeLocal(v *viper.Viper) error { func unmarshalConfigs(base, extra *viper.Viper, c *Config) error { c.Hooks = make(map[string]*Hook) - for _, hookName := range AvailableHooks { + for hookName := range AvailableHooks { if err := addHook(hookName, base, extra, c); err != nil { return err } diff --git a/internal/lefthook/add.go b/internal/lefthook/add.go index 0fcc9cf2..be65023d 100644 --- a/internal/lefthook/add.go +++ b/internal/lefthook/add.go @@ -27,7 +27,7 @@ func Add(opts *Options, args *AddArgs) error { // Creates a hook, given in args. The hook is a Lefthook hook. func (l *Lefthook) Add(args *AddArgs) error { - if !config.HookAvailable(args.Hook) { + if !config.KnownHook(args.Hook) { return fmt.Errorf("Skip adding, hook is unavailable: %s", args.Hook) } diff --git a/internal/lefthook/run.go b/internal/lefthook/run.go index 0c38c5c7..08560552 100644 --- a/internal/lefthook/run.go +++ b/internal/lefthook/run.go @@ -8,7 +8,6 @@ import ( "os" "os/signal" "path/filepath" - "slices" "time" "github.com/evilmartians/lefthook/internal/config" @@ -108,7 +107,7 @@ func (l *Lefthook) Run(hookName string, args RunArgs, gitArgs []string) error { // Find the hook hook, ok := cfg.Hooks[hookName] if !ok { - if slices.Contains(config.AvailableHooks[:], hookName) { + if config.KnownHook(hookName) { log.Debugf("[lefthook] skip: Hook %s doesn't exist in the config", hookName) return nil }