evilmartians / lefthook

Fast and powerful Git hooks manager for any type of projects.
MIT License
4.76k stars 211 forks source link

Skip hook/command when commit message matches a pattern #780

Open reitzig opened 1 month ago

reitzig commented 1 month ago

:zap: Summary

Allow to skip a hook (or individual command) if the commit message matches a certain pattern.

Value

I like using cog verify (cf. cocogitto/cocogitto) as part of a commit-msg hook. I also like creating fixup commits (in IDEA, if that matters) which end up vanishing after rebasing with autosquash.

Sadly, the two do not mix well: cocogitto forbids the ephemeral commit messages of such commits, as they don't conform to conventional commits.

What I would like is to configure lefthook to ignore fixup commits:

commit-msg:
  skip:
    - ref: "wip/*"
    - msg: "^fixup! "
  commands:
    cog:
      run: cog verify --file {1}

Behavior and configuration changes

The change seems additive to me.

reitzig commented 1 month ago

FWIW: cocogitto/cocogitto#403

Either feature fixes my use case, but I do think that this proposal has merit in its own right for lefthook. Users may use different tools to enforce conventional commits!

reitzig commented 1 month ago

Workaround:

commit-msg:
  skip:
    - ref: "wip/*"
  commands:
    cog:
      run: sh -c "if grep -qv '^fixup!' {1}; then cog verify --file {1}; fi"