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

Re: [PATCH 08/10] hook: refactor hook_config_cache from strmap to named struct

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 9, 2026, 21:59 UTC
Message-ID
<xmqqtsuo3bru.fsf@gitster.g>
In-Reply-To
<20260309005416.2760030-9-adrian.ratiu@collabora.com>
Adrian Ratiu <adrian.ratiu@collabora.com> writes:
Show 17 quoted lines
> Replace the raw `struct strmap *hook_config_cache` in `struct repository`
> with a `struct hook_config_cache` which wraps the strmap in a named field.
>
> Replace the bare `char *command` util pointer stored in each string_list
> item with a heap-allocated `struct hook_config_cache_entry` that carries
> that command string.
>
> This is just a refactoring with no behavior changes, to give the cache
> struct room to grow so it can carry the additional hook metadata we'll
> be adding in the following commits.
>
> Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com>
> ---
>  hook.c       | 61 +++++++++++++++++++++++++++++++++-------------------
>  hook.h       | 10 ++++++++-
>  repository.h |  3 ++-
>  3 files changed, 50 insertions(+), 24 deletions(-)

Hmph, so originally we pointed directly at a "struct strmap" instance from inside a "struct repository", and the strmap mapped a hook's event name to the command to run, which is a raw "char *".

In order to future expand the attribute we keep track of for each hook beyond a simple string, we replace the "char *" with a pointer to "struct hook_config_cache_entry". That part makes quite a lot of sense.

However, I'm less convinced about the value of wrapping the `strmap` itself in a new `struct hook_config_cache`. Since the "growth" in later patches happens entirely within the entry struct, this top-level wrapper feels like unnecessary boilerplate that adds an extra layer of indirection without a clear benefit. It might be better to keep the cache as a bare `strmap` and only introduce the entry struct.

Previous: Adrian RatiuNext: Adrian Ratiu
Message 16 of 71 in “config-hook cleanups and two small 'git hook list' features”
  1. 00/10 config-hook cleanups and two small 'git hook list' featuresAdrian Ratiu, Mar 9, 2026
  2. 01/10 hook: move unsorted_string_list_remove() to string-list.[ch]Adrian Ratiu, Mar 9, 2026
  3. SZEDER GáborMar 10, 2026
  4. Adrian RatiuMar 11, 2026
  5. 02/10 hook: fix minor style issuesAdrian Ratiu, Mar 9, 2026
  6. Eric SunshineMar 9, 2026
  7. 03/10 hook: rename cb_data_free/alloc -> hook_data_free/allocAdrian Ratiu, Mar 9, 2026
  8. Patrick SteinhardtMar 11, 2026
  9. Adrian RatiuMar 11, 2026
  10. 04/10 hook: detect & emit two more bugsAdrian Ratiu, Mar 9, 2026
  11. 05/10 hook: replace hook_list_clear() -> string_list_clear_func()Adrian Ratiu, Mar 9, 2026
  12. Eric SunshineMar 9, 2026
  13. Adrian RatiuMar 10, 2026
  14. 06/10 hook: make consistent use of friendly-name in docsAdrian Ratiu, Mar 9, 2026
  15. 08/10 hook: refactor hook_config_cache from strmap to named structAdrian Ratiu, Mar 9, 2026
  16. Junio C HamanoMar 9, 2026
  17. Adrian RatiuMar 10, 2026
  18. 07/10 t1800: add test to verify hook execution orderingAdrian Ratiu, Mar 9, 2026
  19. 09/10 hook: show config scope in git hook listAdrian Ratiu, Mar 9, 2026
  20. Junio C HamanoMar 9, 2026
  21. Adrian RatiuMar 10, 2026
  22. Patrick SteinhardtMar 11, 2026
  23. Adrian RatiuMar 11, 2026
  24. 10/10 hook: show disabled hooks in "git hook list"Adrian Ratiu, Mar 9, 2026
  25. Patrick SteinhardtMar 11, 2026
  26. Adrian RatiuMar 11, 2026
  27. Patrick SteinhardtMar 11, 2026
  28. Junio C HamanoMar 9, 2026
  29. Adrian RatiuMar 10, 2026
  30. Junio C HamanoMar 9, 2026
  31. 00/10 config-hook cleanups and two small 'git hook list' featuresAdrian Ratiu, Mar 20, 2026
  32. 01/10 hook: move unsorted_string_list_remove() to string-list.[ch]Adrian Ratiu, Mar 20, 2026
  33. 03/10 hook: rename cb_data_free/alloc -> hook_data_free/allocAdrian Ratiu, Mar 20, 2026
  34. 04/10 hook: detect & emit two more bugsAdrian Ratiu, Mar 20, 2026
  35. 05/10 hook: replace hook_list_clear() -> string_list_clear_func()Adrian Ratiu, Mar 20, 2026
  36. Patrick SteinhardtMar 24, 2026
  37. Adrian RatiuMar 24, 2026
  38. Patrick SteinhardtMar 25, 2026
  39. 06/10 hook: make consistent use of friendly-name in docsAdrian Ratiu, Mar 20, 2026
  40. 07/10 t1800: add test to verify hook execution orderingAdrian Ratiu, Mar 20, 2026
  41. 08/10 hook: introduce hook_config_cache_entry for per-hook dataAdrian Ratiu, Mar 20, 2026
  42. 02/10 hook: fix minor style issuesAdrian Ratiu, Mar 20, 2026
  43. Patrick SteinhardtMar 24, 2026
  44. Adrian RatiuMar 24, 2026
  45. 09/10 hook: show config scope in git hook listAdrian Ratiu, Mar 20, 2026
  46. Patrick SteinhardtMar 24, 2026
  47. Adrian RatiuMar 25, 2026
  48. 10/10 hook: show disabled hooks in "git hook list"Adrian Ratiu, Mar 20, 2026
  49. Patrick SteinhardtMar 24, 2026
  50. Junio C HamanoMar 24, 2026
  51. Adrian RatiuMar 24, 2026
  52. Junio C HamanoMar 23, 2026
  53. Patrick SteinhardtMar 24, 2026
  54. Adrian RatiuMar 24, 2026
  55. 00/12 config-hook cleanups and three small git-hook featuresAdrian Ratiu, Mar 25, 2026
  56. 01/12 hook: move unsorted_string_list_remove() to string-list.[ch]Adrian Ratiu, Mar 25, 2026
  57. 02/12 builtin/receive-pack: properly init receive_hook strbufAdrian Ratiu, Mar 25, 2026
  58. 04/12 hook: rename cb_data_free/alloc -> hook_data_free/allocAdrian Ratiu, Mar 25, 2026
  59. 03/12 hook: fix minor style issuesAdrian Ratiu, Mar 25, 2026
  60. 05/12 hook: detect & emit two more bugsAdrian Ratiu, Mar 25, 2026
  61. 06/12 hook: replace hook_list_clear() -> string_list_clear_func()Adrian Ratiu, Mar 25, 2026
  62. 07/12 hook: make consistent use of friendly-name in docsAdrian Ratiu, Mar 25, 2026
  63. 08/12 t1800: add test to verify hook execution orderingAdrian Ratiu, Mar 25, 2026
  64. 09/12 hook: introduce hook_config_cache_entry for per-hook dataAdrian Ratiu, Mar 25, 2026
  65. 10/12 hook: show config scope in git hook listAdrian Ratiu, Mar 25, 2026
  66. 11/12 hook: show disabled hooks in "git hook list"Adrian Ratiu, Mar 25, 2026
  67. 12/12 hook: reject unknown hook names in git-hook(1)Adrian Ratiu, Mar 25, 2026
  68. Junio C HamanoMar 25, 2026
  69. Adrian RatiuMar 26, 2026
  70. Patrick SteinhardtMar 27, 2026
  71. Junio C HamanoMar 27, 2026

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.