git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 0/5] Multiple hook support

From
Jeff King <peff@peff.net>
Date
Apr 30, 2019, 21:39 UTC
Message-ID
<20190430213902.GC16290@sigill.intra.peff.net>
In-Reply-To
<20190424004948.728326-1-sandals@crustytoothpaste.net>
On Wed, Apr 24, 2019 at 12:49:43AM +0000, brian m. carlson wrote:
> I've talked with some people about this approach, and they've indicated
> they would prefer a configuration-based approach.
I think I'm some people. :)

I agree with the thoughts that Jonathan pointed out in [1], but I wanted to raise a few points that are more directly related to hook features:

  1. Config is resolved at run-time, making it much easier to have
     system or user-level hooks (as opposed to our current system of
     on-disk files, which require copying or symlinking hooks ahead of
     time into each repository you want to impact).
  2. Config values let you easily run hooks from multiple sources (e.g.,
     a hook specified in /etc/gitconfig, one in ~/.gitconfig, and then a
     repo-level hook in .git/config). Even with a "hook.d" feature like
     this, you are back to doing lots of symlinks within the ".d"
     directory to get this behavior.
     I specifically worry that adding ".d" directories is a step in the
     wrong direction because our solution will probably make this point
     _worse_ than whatever custom trampolines people are already using.
  3. A well-designed config schema can leave room for more
     configuration. E.g., one of the big questions with multi-hooks is
     the error semantics. But what if we had:
       [hook "pre-receive"]
       command = my-hook-cmd
       command = another-hook-cmd
       # stop running and return failure at first non-zero exit
       errorBehavior = stop-on-first
       # ...or run all and return error if _any_ failed
       errorBehavior = report-any-error
       # ...or run and report if any _accepted_
       errorBehavior = report-any-success
      Those are just off the top of my head. But my point is that by
      staking out a config section for each hook, it gives us a place to
      naturally add new config options. And we can do it on a per-hook
      basis, which I think will be important since each hook has its own
      semantics.
      Now that's not _strictly_ necessary. We could still have
      "hook.pre-receive.errorBehavior" and just assume
      "hook.pre-receive.command" is "$GIT_DIR/hooks/pre-receive". But I
      think doing the whole thing from config makes the behavior simple
      and consistent (and the backwards compatibility is easy -- if they
      aren't using the new command config, we really do behave "as if"
      they had set it to the file in the hooks directory).

So I agree with your general sentiment that the multi-hook support is conceptually orthogonal to switching to a config-based system. But I think it's worth considering whether we want to do something config-based first:

  - if we introduce it later, it saves us from having _three_ ways to do
    the same thing
  - I think it provides a more natural way to express the options that
    will inevitably grow once we have multi-hook support
-Peff
[1] https://public-inbox.org/git/20190424023438.GE98980@google.com/
Previous: Duy Nguyen
Message 51 of 51 in “Multiple hook support”
  1. 0/5 Multiple hook supportbrian m. carlson, Apr 24, 2019
  2. 1/5 run-command: add preliminary support for multiple hooksbrian m. carlson, Apr 24, 2019
  3. Junio C HamanoApr 24, 2019
  4. Johannes SixtApr 24, 2019
  5. Junio C HamanoApr 25, 2019
  6. Ævar Arnfjörð BjarmasonApr 25, 2019
  7. Junio C HamanoApr 25, 2019
  8. Johannes SixtApr 25, 2019
  9. brian m. carlsonApr 26, 2019
  10. Johannes SixtApr 26, 2019
  11. brian m. carlsonApr 24, 2019
  12. 2/5 builtin/receive-pack: add support for multiple hooksbrian m. carlson, Apr 24, 2019
  13. 3/5 sequencer: add support for multiple hooksbrian m. carlson, Apr 24, 2019
  14. Phillip WoodApr 24, 2019
  15. brian m. carlsonApr 24, 2019
  16. Phillip WoodApr 25, 2019
  17. 5/5 transport: add support for multiple pre-push hooksbrian m. carlson, Apr 24, 2019
  18. 4/5 builtin/worktree: add support for multiple post-checkout hooksbrian m. carlson, Apr 24, 2019
  19. Junio C HamanoApr 24, 2019
  20. brian m. carlsonApr 24, 2019
  21. Junio C HamanoApr 24, 2019
  22. Ævar Arnfjörð BjarmasonApr 24, 2019
  23. Jonathan NiederApr 24, 2019
  24. Ævar Arnfjörð BjarmasonApr 24, 2019
  25. Ævar Arnfjörð BjarmasonApr 24, 2019
  26. brian m. carlsonApr 24, 2019
  27. Jonathan NiederApr 24, 2019
  28. How to undo previously set configuration? (again)Ævar Arnfjörð Bjarmason, Apr 25, 2019
  29. Duy NguyenApr 25, 2019
  30. Ævar Arnfjörð BjarmasonApr 25, 2019
  31. Ævar Arnfjörð BjarmasonApr 26, 2019
  32. Jonathan NiederApr 25, 2019
  33. Barret RhodenApr 25, 2019
  34. Ævar Arnfjörð BjarmasonApr 25, 2019
  35. Ævar Arnfjörð BjarmasonApr 25, 2019
  36. Junio C HamanoApr 26, 2019
  37. Duy NguyenApr 26, 2019
  38. Jeff KingApr 30, 2019
  39. Duy NguyenMay 1, 2019
  40. Ævar Arnfjörð BjarmasonMay 1, 2019
  41. Duy NguyenMay 1, 2019
  42. Jeff KingMay 1, 2019
  43. Jeff KingMay 1, 2019
  44. Ævar Arnfjörð BjarmasonApr 24, 2019
  45. Phillip WoodApr 24, 2019
  46. Bryan TurnerApr 24, 2019
  47. Duy NguyenApr 24, 2019
  48. brian m. carlsonApr 24, 2019
  49. brian m. carlsonApr 24, 2019
  50. Duy NguyenApr 25, 2019
  51. Jeff KingApr 30, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.