From: Emily Shaffer <emilyshaffer@google.com>
To: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
Cc: git@vger.kernel.org, Junio C Hamano <gitster@pobox.com>,
Jeff King <peff@peff.net>, Taylor Blau <me@ttaylorr.com>,
Felipe Contreras <felipe.contreras@gmail.com>,
Eric Sunshine <sunshine@sunshineco.com>,
"brian m . carlson" <sandals@crustytoothpaste.net>,
Josh Steadmon <steadmon@google.com>,
Jonathan Tan <jonathantanmy@google.com>,
Derrick Stolee <stolee@gmail.com>
Subject: Re: [PATCH v4 00/36] Run hooks via "git run hook" & hook library
Date: Thu, 19 Aug 2021 16:40:14 -0700 [thread overview]
Message-ID: <YR7r3h1AG4Zyn7x7@google.com> (raw)
In-Reply-To: <cover-v4-00.36-00000000000-20210803T191505Z-avarab@gmail.com>
On Tue, Aug 03, 2021 at 09:38:26PM +0200, Ævar Arnfjörð Bjarmason wrote:
>
> This is a v4 re-roll of the "Base for "config-based-hooks" topic.
> * Almost all the callers were just "one-shot" callers, I introduced a
> new run_hooks_oneshot() function for those, which gets rid of the
> verbosity around memory management, see e.g. the "builtin/gc.c" in
> the range-diff below. That run_hooks_oneshot() can also take a NULL
> set of options.
I discussed this elswhere, but just to make doubly sure that comment
doesn't get lost, here's a link to my mail:
https://lore.kernel.org/git/YR2jLdYQA5CVzX5h%40google.com
> Range-diff against v3:
> 1: 27c94247f87 = 1: 81fe1ed90d5 Makefile: mark "check" target as .PHONY
> 2: 6e164edb0b0 ! 2: 0f749530777 Makefile: stop hardcoding {command,config}-list.h
> 3: ddae86802e2 ! 3: 644b31fe281 Makefile: remove an out-of-date comment
> 4: 58c37e4f06e = 4: 89c4d44b0c3 hook.[ch]: move find_hook() to this new library
> 5: 0cf7e078ef4 = 5: 3514e0c0251 hook.c: add a hook_exists() wrapper and use it in bugreport.c
> -: ----------- > 6: d5ef40f77dc hook.c users: use "hook_exists()" insted of "find_hook()"
> 6: f343fc7ae66 ! 7: 4cfd72722c1 hook-list.h: add a generated list of hooks, like config-list.h
Since these 6 were broken out and then brought back into this series,
I'll review them individually downthread.
> 7: cf4b06bfdf8 ! 8: 7cb4a4cb69e hook: add 'run' subcommand
> @@ builtin/hook.c (new)
> +#include "strbuf.h"
> +#include "strvec.h"
> +
> ++#define BUILTIN_HOOK_RUN_USAGE \
> ++ N_("git hook run <hook-name> [-- <hook-args>]")
> ++
Nice, now we avoid string duplication here...
> +static const char * const builtin_hook_usage[] = {
> -+ N_("git hook <command> [...]"),
...and there is no point including this vague thing that has a more
specific description right after. Ok.
> -+ N_("git hook run <hook-name> [-- <hook-args>]"),
> ++ BUILTIN_HOOK_RUN_USAGE,
> + NULL
> +};
[...]
> @@ builtin/hook.c (new)
> +{
> + int i;
> + struct run_hooks_opt opt = RUN_HOOKS_OPT_INIT;
> -+ int rc = 0;
> + const char *hook_name;
> + const char *hook_path;
> -+
> + struct option run_options[] = {
> + OPT_END(),
> + };
> ++ int ret;
> +
> + argc = parse_options(argc, argv, prefix, run_options,
> + builtin_hook_run_usage,
> -+ PARSE_OPT_KEEP_UNKNOWN | PARSE_OPT_KEEP_DASHDASH);
> -+
> -+ if (argc > 1) {
> -+ if (strcmp(argv[1], "--") &&
> -+ strcmp(argv[1], "--end-of-options"))
> -+ /* Having a -- for "run" is mandatory */
> -+ usage_with_options(builtin_hook_usage, run_options);
> -+ /* Add our arguments, start after -- */
> -+ for (i = 2 ; i < argc; i++)
> -+ strvec_push(&opt.args, argv[i]);
> -+ }
> ++ PARSE_OPT_KEEP_DASHDASH);
Nice - this code is being broken up and moved later.
> +
> -+ /* Need to take into account core.hooksPath */
> -+ git_config(git_default_config, NULL);
> ++ if (!argc)
> ++ goto usage;
> +
> + /*
> -+ * We are not using run_hooks() because we'd like to detect
> -+ * missing hooks. Let's find it ourselves and call
> -+ * run_found_hooks() instead.
This comment disappears entirely. I am not too terribly upset about it,
since this behavior changes in my series anyway, but it seems like it
might have been an accident?
> ++ * Having a -- for "run" when providing <hook-args> is
> ++ * mandatory.
> + */
> ++ if (argc > 1 && strcmp(argv[1], "--") &&
> ++ strcmp(argv[1], "--end-of-options"))
> ++ goto usage;
> ++
> ++ /* Add our arguments, start after -- */
> ++ for (i = 2 ; i < argc; i++)
> ++ strvec_push(&opt.args, argv[i]);
> ++
> ++ /* Need to take into account core.hooksPath */
> ++ git_config(git_default_config, NULL);
> ++
> + hook_name = argv[0];
> + hook_path = find_hook(hook_name);
> + if (!hook_path) {
> + error("cannot find a hook named %s", hook_name);
> + return 1;
> + }
> -+ rc = run_found_hooks(hook_name, hook_path, &opt);
> +
> ++ ret = run_hooks(hook_name, hook_path, &opt);
> + run_hooks_opt_clear(&opt);
> -+
> -+ return rc;
> ++ return ret;
> ++usage:
> ++ usage_with_options(builtin_hook_run_usage, run_options);
> +}
> +
> +int cmd_hook(int argc, const char **argv, const char *prefix)
> @@ builtin/hook.c (new)
> + struct option builtin_hook_options[] = {
> + OPT_END(),
> + };
> ++
> + argc = parse_options(argc, argv, NULL, builtin_hook_options,
> + builtin_hook_usage, PARSE_OPT_STOP_AT_NON_OPTION);
> + if (!argc)
> -+ usage_with_options(builtin_hook_usage, builtin_hook_options);
> ++ goto usage;
> +
> + if (!strcmp(argv[0], "run"))
> + return run(argc, argv, prefix);
> -+ else
> -+ usage_with_options(builtin_hook_usage, builtin_hook_options);
> ++
> ++usage:
> ++ usage_with_options(builtin_hook_usage, builtin_hook_options);
> +}
The goto pattern seems readable enough elsewhere, though.
> ## command-list.txt ##
> @@ hook.c: int hook_exists(const char *name)
> + struct hook_cb_data *hook_cb = pp_cb;
> + struct hook *run_me = hook_cb->run_me;
> +
> ++ if (!run_me)
> ++ return 0;
> ++
Now we protect ourselves from the repeated calls to pick_next_hook().
Good.
> + cp->no_stdin = 1;
> + cp->env = hook_cb->options->env.v;
> + cp->stdout_to_stderr = 1;
> @@ hook.c: int hook_exists(const char *name)
> + /* Provide context for errors if necessary */
> + *pp_task_cb = run_me;
> +
> ++ /*
> ++ * This pick_next_hook() will be called again, we're only
> ++ * running one hook, so indicate that no more work will be
> ++ * done.
> ++ */
> ++ hook_cb->run_me = NULL;
> ++
And clearly explaining the caller's behavior here. Sure.
> + return 1;
> +}
> +
> @@ hook.c: int hook_exists(const char *name)
> +
> + hook_cb->rc |= result;
> +
> -+ return 1;
> ++ return 0;
And finally, report "everything is fine" on task finished. Thanks.
> +}
> +
> -+int run_found_hooks(const char *hook_name, const char *hook_path,
> -+ struct run_hooks_opt *options)
> ++int run_hooks(const char *hook_name, const char *hook_path,
> ++ struct run_hooks_opt *options)
Ok. With the rename, we only have "verbose way to call it" and "speedy
way to call it". No more "run_found_hooks()". Thanks, I think I like
this better - I found "run_found_hooks()" to be a little ambiguous.
> @@ hook.c: int hook_exists(const char *name)
> + hook_name);
> +
> + return cb_data.rc;
> -+}
> -+
> -+int run_hooks(const char *hook_name, struct run_hooks_opt *options)
> -+{
> -+ const char *hook_path;
> -+ int ret;
> -+ if (!options)
> -+ BUG("a struct run_hooks_opt must be provided to run_hooks");
> -+
> -+ hook_path = find_hook(hook_name);
> -+
> -+ /*
> -+ * If you need to act on a missing hook, use run_found_hooks()
> -+ * instead
> -+ */
> -+ if (!hook_path)
> -+ return 0;
> -+
> -+ ret = run_found_hooks(hook_name, hook_path, options);
> -+ return ret;
Ok - so we wait for another patch to introduce run_hooks_oneshot. Fine.
> +}
>
> ## hook.h ##
> @@ hook.h: const char *find_hook(const char *name);
> +
> + /* Args to be passed to each hook */
> + struct strvec args;
> -+
> -+ /*
> -+ * Number of threads to parallelize across, currently a stub,
> -+ * we use the parallel API for future-proofing, but we always
> -+ * have one hook of a given name, so this is always an
> -+ * implicit 1 for now.
> -+ */
> -+ int jobs;
Thanks. I think this makes more sense than the weird "futureproofing"
state it was in before.
> ## t/t1800-hook.sh (new) ##
> @@ t/t1800-hook.sh (new)
> +
> +test_expect_success 'git hook usage' '
> + test_expect_code 129 git hook &&
> -+ test_expect_code 129 git hook -h &&
> -+ test_expect_code 129 git hook run -h
> ++ test_expect_code 129 git hook run &&
> ++ test_expect_code 129 git hook run -h &&
> ++ test_expect_code 129 git hook run --unknown 2>err &&
> ++ grep "unknown option" err
> +'
Nice. I was able to use this test myself when I added 'git hook list',
too.
The changes to this patch look good to me.
> 8: 7209f73f281 ! 9: 2b8500aa675 gc: use hook library for pre-auto-gc hook
> @@ Metadata
> ## Commit message ##
> gc: use hook library for pre-auto-gc hook
>
> - Using the hook.h library instead of the run-command.h library to run
> - pre-auto-gc means that those hooks can be set up in config files, as
> - well as in the hookdir. pre-auto-gc is called only from builtin/gc.c.
> + Move the pre-auto-gc hook away from run-command.h to and over to the
> + new hook.h library.
> +
> + To do this introduce a simple run_hooks_oneshot() wrapper, we'll be
> + using it extensively for these simple cases of wanting to run a single
> + hook under a given name, and having it free the memory we allocate for
> + us.
Cool, so we have an excuse for introducing the oneshot wrapper right
away. Thanks.
> -@@ builtin/gc.c: static void add_repack_incremental_option(void)
> -
> - static int need_to_gc(void)
> - {
> -+ struct run_hooks_opt hook_opt = RUN_HOOKS_OPT_INIT;
> -+
> - /*
> - * Setting gc.auto to 0 or negative can disable the
> - * automatic gc.
> @@ builtin/gc.c: static int need_to_gc(void)
> else
> return 0;
>
> - if (run_hook_le(NULL, "pre-auto-gc", NULL))
> -+ if (run_hooks("pre-auto-gc", &hook_opt)) {
> -+ run_hooks_opt_clear(&hook_opt);
> ++ if (run_hooks_oneshot("pre-auto-gc", NULL))
> return 0;
> -+ }
> -+ run_hooks_opt_clear(&hook_opt);
> return 1;
> }
Nice - the callsite looks much tidier now.
> +
> + ## hook.c ##
> +@@ hook.c: int run_hooks(const char *hook_name, const char *hook_path,
>
> + return cb_data.rc;
> + }
> ++
> ++int run_hooks_oneshot(const char *hook_name, struct run_hooks_opt *options)
> ++{
> ++ const char *hook_path;
> ++ int ret;
> ++ struct run_hooks_opt hook_opt_scratch = RUN_HOOKS_OPT_INIT;
> ++
> ++ if (!options)
> ++ options = &hook_opt_scratch;
Ah, it still takes an options (optionally, ha ha) because run_hooks()
would require the caller to provide the hook list/hook path. Ok. Seems
fine, and I like that the '_oneshot' naming change makes it less
surprising that run_hooks_opt_clear() will get called for you.
> ++
> ++ hook_path = find_hook(hook_name);
> ++ if (!hook_path) {
> ++ ret = 0;
> ++ goto cleanup;
> ++ }
> ++
> ++ ret = run_hooks(hook_name, hook_path, options);
> ++cleanup:
> ++ run_hooks_opt_clear(options);
> ++ return ret;
> ++}
> +
> + ## hook.h ##
> +@@ hook.h: void run_hooks_opt_clear(struct run_hooks_opt *o);
> + /**
> + * Takes an already resolved hook found via find_hook() and runs
> + * it. Does not call run_hooks_opt_clear() for you.
> ++ *
> ++ * See run_hooks_oneshot() for the simpler one-shot API.
> + */
> + int run_hooks(const char *hookname, const char *hook_path,
> + struct run_hooks_opt *options);
> ++
> ++/**
> ++ * Calls find_hook() on your "hook_name" and runs the hooks (if any)
> ++ * with run_hooks().
> ++ *
> ++ * If "options" is provided calls run_hooks_opt_clear() on it for
> ++ * you. If "options" is NULL a scratch one will be provided for you
> ++ * before calling run_hooks().
"A scratch one will be provided for you" doesn't sound quite right -
it's not exposed to the caller at all, but the comment sounds like
you're handing the caller this scratch struct. Maybe it's better to say
"the default options from RUN_HOOKS_OPT_INIT will be used"?
As a bonus, if you directly reference the initter macro, then it will
automatically become clear to folks reading the documentation what the
expected parallelism is on their hook, as the parallelism (_SERIES or
_PARALLEL) is included on the name of the macro in my change later.
> ++ */
> ++int run_hooks_oneshot(const char *hook_name, struct run_hooks_opt *options);
> ++
> + #endif
> 9: e9a1e7cf61e ! 10: 3ee55d2c10f rebase: teach pre-rebase to use hook.h
> @@ Metadata
> Author: Emily Shaffer <emilyshaffer@google.com>
>
> ## Commit message ##
> - rebase: teach pre-rebase to use hook.h
> + rebase: convert pre-rebase to use hook.h
>
> Move the pre-rebase hook away from run-command.h to and over to the
> new hook.h library.
> @@ builtin/rebase.c: int cmd_rebase(int argc, const char **argv, const char *prefix
> if (!ok_to_skip_pre_rebase &&
> - run_hook_le(NULL, "pre-rebase", options.upstream_arg,
> - argc ? argv[0] : NULL, NULL))
> -+ run_hooks("pre-rebase", &hook_opt)) {
> -+ run_hooks_opt_clear(&hook_opt);
> ++ run_hooks_oneshot("pre-rebase", &hook_opt))
Ok, it just uses the oneshot call instead. Looks good.
> 10: 1d087269303 ! 11: 050f20d14f0 am: convert applypatch hooks to use config
> 11: 32eec5dc2f0 ! 12: ac875d284da hooks: convert 'post-checkout' hook to hook library
> 12: e9fa3f67593 ! 13: 69763bc2255 merge: use config-based hooks for post-merge hook
The above all just use the oneshot instead, and have some minor tweaks
to commit messages to lose references to the config. Looks good.
> 13: 12347d901bb ! 14: 2ca1ca1b8e4 git hook run: add an --ignore-missing flag
> @@ Documentation/git-hook.txt: optional `--` (or `--end-of-options`, see linkgit:gi
> linkgit:githooks[5]
>
> ## builtin/hook.c ##
> +@@
> + #include "strvec.h"
> +
> + #define BUILTIN_HOOK_RUN_USAGE \
> +- N_("git hook run <hook-name> [-- <hook-args>]")
> ++ N_("git hook run [--ignore-missing] <hook-name> [-- <hook-args>]")
Ok. We update the usage in the macro here instead. Nice.
> @@ builtin/hook.c: static int run(int argc, const char **argv, const char *prefix)
> - /*
> - * We are not using run_hooks() because we'd like to detect
> - * missing hooks. Let's find it ourselves and call
> -- * run_found_hooks() instead.
> -+ * run_found_hooks() instead...
> - */
> + git_config(git_default_config, NULL);
> +
> hook_name = argv[0];
> ++ if (ignore_missing)
> ++ return run_hooks_oneshot(hook_name, &opt);
> hook_path = find_hook(hook_name);
> if (!hook_path) {
> -+ /* ... act like run_hooks() under --ignore-missing */
> -+ if (ignore_missing)
> -+ return 0;
> error("cannot find a hook named %s", hook_name);
> - return 1;
> - }
Hm. I actually think this was clearer before. I *think* that is because
you and I have different opinions on the clarity of multiple returns :)
But I think it is a little confusing to say "ok, we will call an
entirely different entry point in case of this one thing which we will
have to check anyways".
> 14: 71d209b4077 ! 15: 5b66b04bec7 send-email: use 'git hook run' for 'sendemail-validate'
> @@ git-send-email.perl: sub validate_patch {
> if ($repo) {
> + my $hook_name = 'sendemail-validate';
> my $hooks_path = $repo->command_oneline('rev-parse', '--git-path', 'hooks');
> -- my $validate_hook = catfile($hooks_path,
> + require File::Spec;
> +- my $validate_hook = File::Spec->catfile($hooks_path,
> - 'sendemail-validate');
> -+ my $validate_hook = catfile($hooks_path, $hook_name);
> ++ my $validate_hook = File::Spec->catfile($hooks_path, $hook_name);
Ok, we are adapting to some other change around File::Spec that happened
to git-send-email.perl elsewhere. The change to this patch looks good to
me.
> my $hook_error;
> if (-x $validate_hook) {
> - my $target = abs_path($fn);
> + require Cwd;
> @@ git-send-email.perl: sub validate_patch {
> chdir($repo->wc_path() or $repo->repo_path())
> or die("chdir: $!");
> 15: 246a82b55b2 = 16: 14a37a43db2 git-p4: use 'git hook' to run hooks
> 16: e3f8482d803 ! 17: ad5d0e0e7de commit: use hook.h to execute hooks
> @@ Metadata
> Author: Emily Shaffer <emilyshaffer@google.com>
>
> ## Commit message ##
> - commit: use hook.h to execute hooks
> + commit: convert {pre-commit,prepare-commit-msg} hook to hook.h
>
> - Teach run_commit_hook() to call hook.h instead of run-command.h. This
> - covers 'pre-commit', 'commit-msg', and
> - 'prepare-commit-msg'.
> -
> - Additionally, ask the hook library - not run-command - whether any
> - hooks will be run, as it's possible hooks may exist in the config but
> - not the hookdir.
> -
> - Because all but 'post-commit' hooks are expected to make some state
> - change, force all but 'post-commit' hook to run in series. 'post-commit'
> - "is meant primarily for notification, and cannot affect the outcome of
> - `git commit`," so it is fine to run in parallel.
I am a little bummed that the patch reordering effectively removes the
justification for parallel/serial execution for each hook from 'git
blame'. Oh well.
> + Move these hooks hook away from run-command.h to and over to the new
> + hook.h library.
>
> Signed-off-by: Emily Shaffer <emilyshaffer@google.com>
> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
>
> ## commit.c ##
Otherwise the main change here is dealing with other improvements
earlier in the series, like 'hook_exists()' and 'run_hooks_oneshot()'.
Looks fine.
> 17: 6ed61071c5e ! 18: 3d3a33e2674 read-cache: convert post-index-change hook to use config
> @@ Metadata
> Author: Emily Shaffer <emilyshaffer@google.com>
>
> ## Commit message ##
> - read-cache: convert post-index-change hook to use config
> + read-cache: convert post-index-change to use hook.h
>
> - By using hook.h instead of run-command.h to run, post-index-change hooks
> - can now be specified in the config in addition to the hookdir.
> - post-index-change is not run anywhere besides in read-cache.c.
> + Move the post-index-change hook away from run-command.h to and over to
> + the new hook.h library.
I do not think it is necessary to drop the mention about
'post-index-change' being run anywhere else, but that's just a nit, not
worth fixing :)
>
> This removes the last direct user of run_hook_ve(), so we can make the
> function static now. It'll be removed entirely soon.
> @@ read-cache.c: static int do_write_locked_index(struct index_state *istate, struc
> + istate->updated_workdir ? "1" : "0",
> + istate->updated_skipworktree ? "1" : "0",
> + NULL);
> -+ run_hooks("post-index-change", &hook_opt);
> -+ run_hooks_opt_clear(&hook_opt);
> ++ run_hooks_oneshot("post-index-change", &hook_opt);
> +
Mechanical change to using run_hooks_oneshot(). OK.
> istate->updated_workdir = 0;
> istate->updated_skipworktree = 0;
> 18: e4ef3f4548a ! 19: 893f8666301 receive-pack: convert push-to-checkout hook to hook.h
> @@ Metadata
> ## Commit message ##
> receive-pack: convert push-to-checkout hook to hook.h
>
> - By using hook.h instead of run-command.h to invoke push-to-checkout,
> - hooks can now be specified in the config as well as in the hookdir.
> - push-to-checkout is not called anywhere but in builtin/receive-pack.c.
> + Move the push-to-checkout hook away from run-command.h to and over to
> + the new hook.h library.
You made a comment in the commit before about the final instance of
run_hook_ve; do you want to make a similar one here about run_hook_le?
The range-diff here is mechanical so looks fine to me.
> 19: e3dda367ec9 = 20: 070433deba5 run-command: remove old run_hook_{le,ve}() hook API
> 20: 477d75bf579 = 21: 1028e0c1667 run-command: allow stdin for run_processes_parallel
> 21: b7c0ee9719a ! 22: 639e59e9ed0 hook: support passing stdin to hooks
> @@ Documentation/git-hook.txt: what those are.
>
> ## builtin/hook.c ##
> @@
> + #include "strvec.h"
>
> - static const char * const builtin_hook_usage[] = {
> - N_("git hook <command> [...]"),
> -- N_("git hook run <hook-name> [-- <hook-args>]"),
> -+ N_("git hook run [<args>] <hook-name> [-- <hook-args>]"),
> - NULL
> - };
> -
> - static const char * const builtin_hook_run_usage[] = {
> - N_("git hook run <hook-name> [-- <hook-args>]"),
> -+ N_("git hook run [--to-stdin=<path>] <hook-name> [-- <hook-args>]"),
> - NULL
> - };
> + #define BUILTIN_HOOK_RUN_USAGE \
> +- N_("git hook run [--ignore-missing] <hook-name> [-- <hook-args>]")
> ++ N_("git hook run [--ignore-missing] [--to-stdin=<path>] <hook-name> [-- <hook-args>]")
>
Just coping with the macro instead of the duplicated strings. Ok.
The range-diff looks fine to me.
> 22: 4035069a98c ! 23: 7d1925cca48 am: convert 'post-rewrite' hook to hook.h
> @@ builtin/am.c: static int run_applypatch_msg_hook(struct am_state *state)
> {
> - struct child_process cp = CHILD_PROCESS_INIT;
> - const char *hook = find_hook("post-rewrite");
> -+ struct run_hooks_opt opt = RUN_HOOKS_OPT_INIT;
> - int ret;
> -
> +- int ret;
> +-
> - if (!hook)
> - return 0;
> -
> @@ builtin/am.c: static int run_applypatch_msg_hook(struct am_state *state)
> - cp.in = xopen(am_path(state, "rewritten"), O_RDONLY);
> - cp.stdout_to_stderr = 1;
> - cp.trace2_hook_name = "post-rewrite";
> -+ strvec_push(&opt.args, "rebase");
> -+ opt.path_to_stdin = am_path(state, "rewritten");
> ++ struct run_hooks_opt opt = RUN_HOOKS_OPT_INIT;
>
> - ret = run_command(&cp);
> -+ ret = run_hooks("post-rewrite", &opt);
> ++ strvec_push(&opt.args, "rebase");
> ++ opt.path_to_stdin = am_path(state, "rewritten");
>
> - close(cp.in);
> -+ run_hooks_opt_clear(&opt);
> - return ret;
> +- return ret;
> ++ return run_hooks_oneshot("post-rewrite", &opt);
> }
>
> + /**
Man, the range-diff did a terrible job of summarizing this :)
The patch itself looks great, though, with the switch to using
run_hooks_oneshot. Thanks.
> 24: da46c859c1c ! 25: 05d1085f7eb hook: provide stdin by string_list or callback
> @@ hook.c: static int pick_next_hook(struct child_process *cp,
> } else {
> cp->no_stdin = 1;
> }
> -@@ hook.c: int run_found_hooks(const char *hook_name, const char *hook_path,
> - run_processes_parallel_tr2(options->jobs,
> +@@ hook.c: int run_hooks(const char *hook_name, const char *hook_path,
> + run_processes_parallel_tr2(jobs,
> pick_next_hook,
> notify_start_failure,
> - NULL,
> @@ hook.c: int run_found_hooks(const char *hook_name, const char *hook_path,
> notify_hook_finished,
> &cb_data,
> "hook",
> -@@ hook.c: int run_hooks(const char *hook_name, struct run_hooks_opt *options)
> +@@ hook.c: int run_hooks(const char *hook_name, const char *hook_path,
> +
> + if (options->absolute_path)
> + strbuf_release(&abs_path);
> ++ free(my_hook.feed_pipe_cb_data);
Nice catch. Thanks.
> 25: 7343be28ef4 ! 26: 4b7175af2e5 hook: convert 'post-rewrite' hook in sequencer.c to hook.h
> 26: 85bf13a0835 ! 27: 3f24e056410 transport: convert pre-push hook to use config
> @@ Metadata
> Author: Emily Shaffer <emilyshaffer@google.com>
>
> ## Commit message ##
> - transport: convert pre-push hook to use config
> + transport: convert pre-push hook to hook.h
>
> - By using the hook.h:run_hooks API, pre-push hooks can be specified in
> - the config as well as in the hookdir.
> + Move the pre-push hook away from run-command.h to and over to the new
> + hook.h library.
>
> Signed-off-by: Emily Shaffer <emilyshaffer@google.com>
> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
> @@ transport.c: static void die_with_unpushed_submodules(struct string_list *needs_
> - int ret = 0, x;
> + int ret = 0;
> + struct run_hooks_opt opt = RUN_HOOKS_OPT_INIT;
> -+ struct strbuf tmp = STRBUF_INIT;
> struct ref *r;
> - struct child_process proc = CHILD_PROCESS_INIT;
> - struct strbuf buf;
> @@ transport.c: static void die_with_unpushed_submodules(struct string_list *needs_
> - finish_command(&proc);
> - return -1;
> - }
> --
> -- sigchain_push(SIGPIPE, SIG_IGN);
> -+ struct string_list to_stdin = STRING_LIST_INIT_DUP;
> ++ struct string_list to_stdin = STRING_LIST_INIT_NODUP;
>
> +- sigchain_push(SIGPIPE, SIG_IGN);
> +-
> - strbuf_init(&buf, 256);
> + strvec_push(&opt.args, transport->remote->name);
> + strvec_push(&opt.args, transport->url);
>
> for (r = remote_refs; r; r = r->next) {
> ++ struct strbuf buf = STRBUF_INIT;
Ah. It is not being freed because its lifetime is being managed by
to_stdin instead. Ok, cool!
> ++
> if (!r->peer_ref) continue;
> -@@ transport.c: static int run_pre_push_hook(struct transport *transport,
> + if (r->status == REF_STATUS_REJECT_NONFASTFORWARD) continue;
> + if (r->status == REF_STATUS_REJECT_STALE) continue;
> if (r->status == REF_STATUS_REJECT_REMOTE_UPDATED) continue;
> if (r->status == REF_STATUS_UPTODATE) continue;
>
> - strbuf_reset(&buf);
> - strbuf_addf( &buf, "%s %s %s %s\n",
> -+ strbuf_reset(&tmp);
> -+ strbuf_addf(&tmp, "%s %s %s %s",
> ++ strbuf_addf(&buf, "%s %s %s %s",
> r->peer_ref->name, oid_to_hex(&r->new_oid),
> r->name, oid_to_hex(&r->old_oid));
> -
> @@ transport.c: static int run_pre_push_hook(struct transport *transport,
> - ret = -1;
> - break;
> - }
> -+ string_list_append(&to_stdin, tmp.buf);
> ++ string_list_append(&to_stdin, strbuf_detach(&buf, NULL));
> }
>
> - strbuf_release(&buf);
> @@ transport.c: static int run_pre_push_hook(struct transport *transport,
> - x = finish_command(&proc);
> - if (!ret)
> - ret = x;
> -+ ret = run_hooks("pre-push", &opt);
> -+ run_hooks_opt_clear(&opt);
> -+ strbuf_release(&tmp);
> ++ ret = run_hooks_oneshot("pre-push", &opt);
> ++ to_stdin.strdup_strings = 1;
And this is a typical change to the oneshot function. Cool.
> + string_list_clear(&to_stdin, 0);
>
> return ret;
> -: ----------- > 28: ecf75f33233 hook tests: test for exact "pre-push" hook input
> -: ----------- > 29: 2c961be94b4 hook tests: use a modern style for "pre-push" tests
I'll take a look at these separately.
> 27: 331014bad17 ! 30: 1ce456f9d9d reference-transaction: use hook.h to run hooks
> @@ refs.c: int ref_update_reject_duplicates(struct string_list *refnames,
> const char *state)
> {
> - struct child_process proc = CHILD_PROCESS_INIT;
> - struct strbuf buf = STRBUF_INIT;
> +- struct strbuf buf = STRBUF_INIT;
> - const char *hook;
> + struct run_hooks_opt opt = RUN_HOOKS_OPT_INIT;
> -+ struct string_list to_stdin = STRING_LIST_INIT_DUP;
> ++ struct string_list to_stdin = STRING_LIST_INIT_NODUP;
> int ret = 0, i;
> -+ char o[GIT_MAX_HEXSZ + 1], n[GIT_MAX_HEXSZ + 1];
>
> - hook = find_hook("reference-transaction");
> - if (!hook)
> -+ if (!hook_exists("reference-transaction"))
> - return ret;
> -
> +- return ret;
> +-
> - strvec_pushl(&proc.args, hook, state, NULL);
> - proc.in = -1;
> - proc.stdout_to_stderr = 1;
> @@ refs.c: int ref_update_reject_duplicates(struct string_list *refnames,
> -
> - ret = start_command(&proc);
> - if (ret)
> -- return ret;
> --
> ++ if (!hook_exists("reference-transaction"))
> + return ret;
> +
> - sigchain_push(SIGPIPE, SIG_IGN);
> + strvec_push(&opt.args, state);
>
> for (i = 0; i < transaction->nr; i++) {
> struct ref_update *update = transaction->updates[i];
> -+ oid_to_hex_r(o, &update->old_oid);
> -+ oid_to_hex_r(n, &update->new_oid);
> ++ struct strbuf buf = STRBUF_INIT;
Ah, this is doing the same thing as with 'pre-push'. Cool.
>
> - strbuf_reset(&buf);
> +- strbuf_reset(&buf);
> - strbuf_addf(&buf, "%s %s %s\n",
> -- oid_to_hex(&update->old_oid),
> -- oid_to_hex(&update->new_oid),
> -- update->refname);
> ++ strbuf_addf(&buf, "%s %s %s",
> + oid_to_hex(&update->old_oid),
> + oid_to_hex(&update->new_oid),
> + update->refname);
> -
> - if (write_in_full(proc.in, buf.buf, buf.len) < 0) {
> - if (errno != EPIPE)
> - ret = -1;
> - break;
> - }
> -+ strbuf_addf(&buf, "%s %s %s", o, n, update->refname);
> -+ string_list_append(&to_stdin, buf.buf);
> ++ string_list_append(&to_stdin, strbuf_detach(&buf, NULL));
> }
>
> - close(proc.in);
> - sigchain_pop(SIGPIPE);
> +- strbuf_release(&buf);
> + opt.feed_pipe = pipe_from_string_list;
> + opt.feed_pipe_ctx = &to_stdin;
> +
> -+ ret = run_hooks("reference-transaction", &opt);
> -+ run_hooks_opt_clear(&opt);
> - strbuf_release(&buf);
> ++ ret = run_hooks_oneshot("reference-transaction", &opt);
> ++ to_stdin.strdup_strings = 1;
And turning on strdup_strings here means we will free them when we call
string_list_clear. Ok.
> + string_list_clear(&to_stdin, 0);
>
> - ret |= finish_command(&proc);
> 32: db70b59b3bd ! 35: ceef2f3e804 receive-pack: convert receive hooks to hook.h
> @@ builtin/receive-pack.c: static void hook_output_to_sideband(struct strbuf *outpu
> +{
> + struct run_hooks_opt opt = RUN_HOOKS_OPT_INIT;
> + struct receive_hook_feed_context ctx;
> -+ int rc;
> + struct command *iter = commands;
> +
> + /* if there are no valid commands, don't invoke the hook at all. */
> @@ builtin/receive-pack.c: static void hook_output_to_sideband(struct strbuf *outpu
> + if (!iter)
> + return 0;
> +
> -+ /* pre-receive hooks should run in series as the hook updates refs */
> -+ if (!strcmp(hook_name, "pre-receive"))
> -+ opt.jobs = 1;
> -+
Hm, interesting. I'll note this as a case to watch for when I add the
.jobs option back in.
Thanks. I'll take a look at the newly added/copied over patches next.
- Emily
next prev parent reply other threads:[~2021-08-19 23:40 UTC|newest]
Thread overview: 479+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-11 2:10 [PATCH v8 00/37] config-based hooks Emily Shaffer
2021-03-11 2:10 ` [PATCH v8 01/37] doc: propose hooks managed by the config Emily Shaffer
2021-03-11 2:10 ` [PATCH v8 02/37] hook: scaffolding for git-hook subcommand Emily Shaffer
2021-03-11 2:10 ` [PATCH v8 03/37] hook: add list command Emily Shaffer
2021-03-12 8:20 ` Ævar Arnfjörð Bjarmason
2021-03-24 17:31 ` Emily Shaffer
2021-03-25 12:36 ` Ævar Arnfjörð Bjarmason
2021-03-11 2:10 ` [PATCH v8 04/37] hook: include hookdir hook in list Emily Shaffer
2021-03-12 8:30 ` Ævar Arnfjörð Bjarmason
2021-03-24 17:56 ` Emily Shaffer
2021-03-24 19:11 ` Junio C Hamano
2021-03-24 19:23 ` Eric Sunshine
2021-03-24 20:07 ` Emily Shaffer
2021-03-11 2:10 ` [PATCH v8 05/37] hook: teach hook.runHookDir Emily Shaffer
2021-03-12 8:33 ` Ævar Arnfjörð Bjarmason
2021-03-24 18:46 ` Emily Shaffer
2021-03-24 22:38 ` Ævar Arnfjörð Bjarmason
2021-03-11 2:10 ` [PATCH v8 06/37] hook: implement hookcmd.<name>.skip Emily Shaffer
2021-03-12 8:49 ` Ævar Arnfjörð Bjarmason
2021-03-11 2:10 ` [PATCH v8 07/37] parse-options: parse into strvec Emily Shaffer
2021-03-12 8:50 ` Ævar Arnfjörð Bjarmason
2021-03-24 20:34 ` Emily Shaffer
2021-03-11 2:10 ` [PATCH v8 08/37] hook: add 'run' subcommand Emily Shaffer
2021-03-12 8:54 ` Ævar Arnfjörð Bjarmason
2021-03-24 21:29 ` Emily Shaffer
2021-03-12 10:22 ` Junio C Hamano
2021-03-11 2:10 ` [PATCH v8 09/37] hook: introduce hook_exists() Emily Shaffer
2021-03-11 2:10 ` [PATCH v8 10/37] hook: support passing stdin to hooks Emily Shaffer
2021-03-12 9:00 ` Ævar Arnfjörð Bjarmason
2021-03-12 10:22 ` Junio C Hamano
2021-03-11 2:10 ` [PATCH v8 11/37] run-command: allow stdin for run_processes_parallel Emily Shaffer
2021-03-11 2:10 ` [PATCH v8 12/37] hook: allow parallel hook execution Emily Shaffer
2021-03-11 2:10 ` [PATCH v8 13/37] hook: allow specifying working directory for hooks Emily Shaffer
2021-03-11 2:10 ` [PATCH v8 14/37] run-command: add stdin callback for parallelization Emily Shaffer
2021-03-11 2:10 ` [PATCH v8 15/37] hook: provide stdin by string_list or callback Emily Shaffer
2021-03-11 2:10 ` [PATCH v8 16/37] run-command: allow capturing of collated output Emily Shaffer
2021-03-11 2:10 ` [PATCH v8 17/37] hooks: allow callers to capture output Emily Shaffer
2021-03-12 9:08 ` Ævar Arnfjörð Bjarmason
2021-03-24 21:54 ` Emily Shaffer
2021-03-11 2:10 ` [PATCH v8 18/37] commit: use config-based hooks Emily Shaffer
2021-03-12 10:22 ` Junio C Hamano
2021-03-11 2:10 ` [PATCH v8 19/37] am: convert applypatch hooks to use config Emily Shaffer
2021-03-12 10:23 ` Junio C Hamano
2021-03-29 23:39 ` Emily Shaffer
2021-03-11 2:10 ` [PATCH v8 20/37] merge: use config-based hooks for post-merge hook Emily Shaffer
2021-03-11 2:10 ` [PATCH v8 21/37] gc: use hook library for pre-auto-gc hook Emily Shaffer
2021-03-11 2:10 ` [PATCH v8 22/37] rebase: teach pre-rebase to use hook.h Emily Shaffer
2021-03-12 10:24 ` Junio C Hamano
2021-03-11 2:10 ` [PATCH v8 23/37] read-cache: convert post-index-change hook to use config Emily Shaffer
2021-03-12 10:22 ` Junio C Hamano
2021-03-29 23:56 ` Emily Shaffer
2021-03-11 2:10 ` [PATCH v8 24/37] receive-pack: convert push-to-checkout hook to hook.h Emily Shaffer
2021-03-12 10:24 ` Junio C Hamano
2021-03-29 23:59 ` Emily Shaffer
2021-03-30 0:10 ` Junio C Hamano
2021-03-11 2:10 ` [PATCH v8 25/37] git-p4: use 'git hook' to run hooks Emily Shaffer
2021-03-11 2:10 ` [PATCH v8 26/37] hooks: convert 'post-checkout' hook to hook library Emily Shaffer
2021-03-11 2:10 ` [PATCH v8 27/37] hook: convert 'post-rewrite' hook to config Emily Shaffer
2021-03-11 2:10 ` [PATCH v8 28/37] transport: convert pre-push hook to use config Emily Shaffer
2021-03-11 2:10 ` [PATCH v8 29/37] reference-transaction: look for hooks in config Emily Shaffer
2021-03-11 2:10 ` [PATCH v8 30/37] receive-pack: convert 'update' hook to hook.h Emily Shaffer
2021-03-11 2:10 ` [PATCH v8 31/37] proc-receive: acquire hook list from hook.h Emily Shaffer
2021-03-11 2:10 ` [PATCH v8 32/37] post-update: use hook.h library Emily Shaffer
2021-03-12 9:14 ` Ævar Arnfjörð Bjarmason
2021-03-30 0:01 ` Emily Shaffer
2021-03-11 2:10 ` [PATCH v8 33/37] receive-pack: convert receive hooks to hook.h Emily Shaffer
2021-03-11 2:10 ` [PATCH v8 34/37] bugreport: use hook_exists instead of find_hook Emily Shaffer
2021-03-11 2:10 ` [PATCH v8 35/37] git-send-email: use 'git hook run' for 'sendemail-validate' Emily Shaffer
2021-03-12 9:21 ` Ævar Arnfjörð Bjarmason
2021-03-30 0:03 ` Emily Shaffer
2021-03-31 21:47 ` Emily Shaffer
2021-03-31 22:06 ` Junio C Hamano
2021-04-01 18:08 ` Emily Shaffer
2021-04-01 18:55 ` Junio C Hamano
2021-04-02 11:34 ` [PATCH 0/2] git-send-email: refactor duplicate $? checks into a function Ævar Arnfjörð Bjarmason
2021-04-02 11:34 ` [PATCH 1/2] git-send-email: replace "map" in void context with "for" Ævar Arnfjörð Bjarmason
2021-04-02 21:31 ` Junio C Hamano
2021-04-02 21:37 ` Emily Shaffer
2021-04-02 11:34 ` [PATCH 2/2] git-send-email: refactor duplicate $? checks into a function Ævar Arnfjörð Bjarmason
2021-04-02 21:36 ` Junio C Hamano
2021-04-04 9:19 ` [PATCH v2 0/4] refactor duplicate $? checks into a function + improve errors Ævar Arnfjörð Bjarmason
2021-04-04 9:19 ` [PATCH v2 1/4] git-send-email: replace "map" in void context with "for" Ævar Arnfjörð Bjarmason
2021-04-04 9:19 ` [PATCH v2 2/4] git-send-email: refactor duplicate $? checks into a function Ævar Arnfjörð Bjarmason
2021-04-05 19:11 ` Junio C Hamano
2021-04-05 23:47 ` Junio C Hamano
2021-04-08 22:43 ` Junio C Hamano
2021-04-08 22:46 ` Junio C Hamano
2021-04-08 23:54 ` Ævar Arnfjörð Bjarmason
2021-04-09 0:08 ` Junio C Hamano
2021-05-03 20:30 ` Emily Shaffer
2021-04-04 9:19 ` [PATCH v2 3/4] git-send-email: test full --validate output Ævar Arnfjörð Bjarmason
2021-04-04 9:19 ` [PATCH v2 4/4] git-send-email: improve --validate error output Ævar Arnfjörð Bjarmason
2021-04-05 19:14 ` Junio C Hamano
2021-04-06 14:00 ` [PATCH v3 0/3] refactor duplicate $? checks into a function + improve errors Ævar Arnfjörð Bjarmason
2021-04-06 14:00 ` [PATCH v3 1/3] git-send-email: test full --validate output Ævar Arnfjörð Bjarmason
2021-04-06 14:00 ` [PATCH v3 2/3] git-send-email: refactor duplicate $? checks into a function Ævar Arnfjörð Bjarmason
2021-04-06 14:00 ` [PATCH v3 3/3] git-send-email: improve --validate error output Ævar Arnfjörð Bjarmason
2021-04-06 20:33 ` [PATCH v3 0/3] refactor duplicate $? checks into a function + improve errors Junio C Hamano
2021-03-12 23:29 ` [PATCH v8 35/37] git-send-email: use 'git hook run' for 'sendemail-validate' Emily Shaffer
2021-03-11 2:10 ` [PATCH v8 36/37] run-command: stop thinking about hooks Emily Shaffer
2021-03-12 9:23 ` Ævar Arnfjörð Bjarmason
2021-03-30 0:07 ` Emily Shaffer
2021-03-11 2:10 ` [PATCH v8 37/37] docs: unify githooks and git-hook manpages Emily Shaffer
2021-03-12 9:29 ` Ævar Arnfjörð Bjarmason
2021-03-30 0:10 ` Emily Shaffer
2021-04-07 2:36 ` Junio C Hamano
2021-04-08 20:20 ` Jeff Hostetler
2021-04-08 21:17 ` Junio C Hamano
2021-04-08 23:46 ` Emily Shaffer
2021-04-09 0:03 ` Junio C Hamano
2021-03-11 22:26 ` [PATCH v8 00/37] config-based hooks Junio C Hamano
2021-03-12 23:27 ` Emily Shaffer
2021-03-12 9:49 ` Ævar Arnfjörð Bjarmason
2021-03-17 18:41 ` Emily Shaffer
2021-03-17 19:16 ` Emily Shaffer
2021-03-12 11:13 ` Ævar Arnfjörð Bjarmason
2021-03-25 12:41 ` Ævar Arnfjörð Bjarmason
2021-05-27 0:08 ` [PATCH v9 00/37] propose " Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 01/37] doc: propose hooks managed by the config Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 02/37] hook: introduce git-hook subcommand Emily Shaffer
2021-05-27 2:18 ` Junio C Hamano
2021-05-27 0:08 ` [PATCH v9 03/37] hook: include hookdir hook in list Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 04/37] hook: teach hook.runHookDir Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 05/37] hook: implement hookcmd.<name>.skip Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 06/37] parse-options: parse into strvec Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 07/37] hook: add 'run' subcommand Emily Shaffer
2021-06-03 9:07 ` Ævar Arnfjörð Bjarmason
2021-06-03 22:29 ` Junio C Hamano
2021-05-27 0:08 ` [PATCH v9 08/37] hook: introduce hook_exists() Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 09/37] hook: support passing stdin to hooks Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 10/37] run-command: allow stdin for run_processes_parallel Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 11/37] hook: allow parallel hook execution Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 12/37] hook: allow specifying working directory for hooks Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 13/37] run-command: add stdin callback for parallelization Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 14/37] hook: provide stdin by string_list or callback Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 15/37] run-command: allow capturing of collated output Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 16/37] hooks: allow callers to capture output Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 17/37] commit: use config-based hooks Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 18/37] am: convert applypatch hooks to use config Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 19/37] merge: use config-based hooks for post-merge hook Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 20/37] gc: use hook library for pre-auto-gc hook Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 21/37] rebase: teach pre-rebase to use hook.h Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 22/37] read-cache: convert post-index-change hook to use config Emily Shaffer
2021-05-27 23:04 ` Ævar Arnfjörð Bjarmason
2021-05-28 1:09 ` Taylor Blau
2021-05-31 19:21 ` Felipe Contreras
2021-05-27 0:08 ` [PATCH v9 23/37] receive-pack: convert push-to-checkout hook to hook.h Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 24/37] git-p4: use 'git hook' to run hooks Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 25/37] hooks: convert 'post-checkout' hook to hook library Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 26/37] hook: convert 'post-rewrite' hook to config Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 27/37] transport: convert pre-push hook to use config Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 28/37] reference-transaction: look for hooks in config Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 29/37] receive-pack: convert 'update' hook to hook.h Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 30/37] proc-receive: acquire hook list from hook.h Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 31/37] post-update: use hook.h library Emily Shaffer
2021-06-14 9:09 ` Ævar Arnfjörð Bjarmason
2021-05-27 0:08 ` [PATCH v9 32/37] receive-pack: convert receive hooks to hook.h Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 33/37] bugreport: use hook_exists instead of find_hook Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 34/37] git-send-email: use 'git hook run' for 'sendemail-validate' Emily Shaffer
2021-05-27 11:56 ` Ævar Arnfjörð Bjarmason
2021-05-27 0:08 ` [PATCH v9 35/37] run-command: stop thinking about hooks Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 36/37] doc: clarify fsmonitor-watchman specification Emily Shaffer
2021-05-27 0:08 ` [PATCH v9 37/37] docs: link githooks and git-hook manpages Emily Shaffer
2021-06-03 9:18 ` Ævar Arnfjörð Bjarmason
2021-05-27 11:49 ` [PATCH v9 00/37] propose config-based hooks Ævar Arnfjörð Bjarmason
2021-05-27 13:36 ` Ævar Arnfjörð Bjarmason
2021-05-27 17:46 ` Felipe Contreras
2021-05-28 12:11 ` [PATCH 00/31] minimal restart of "config-based-hooks" Ævar Arnfjörð Bjarmason
2021-05-28 12:11 ` [PATCH 01/31] hooks tests: don't leave "actual" nonexisting on failure Ævar Arnfjörð Bjarmason
2021-05-28 12:11 ` [PATCH 02/31] gc tests: add a test for the "pre-auto-gc" hook Ævar Arnfjörð Bjarmason
2021-05-28 12:11 ` [PATCH 03/31] hook: add 'run' subcommand Ævar Arnfjörð Bjarmason
2021-05-28 12:11 ` [PATCH 04/31] run-command.h: move find_hook() to hook.h Ævar Arnfjörð Bjarmason
2021-05-28 12:11 ` [PATCH 05/31] hook.c: add a hook_exists() wrapper and use it in bugreport.c Ævar Arnfjörð Bjarmason
2021-05-28 12:11 ` [PATCH 06/31] gc: use hook library for pre-auto-gc hook Ævar Arnfjörð Bjarmason
2021-05-28 12:11 ` [PATCH 07/31] rebase: teach pre-rebase to use hook.h Ævar Arnfjörð Bjarmason
2021-05-28 12:11 ` [PATCH 08/31] am: convert applypatch hooks to use config Ævar Arnfjörð Bjarmason
2021-05-28 12:11 ` [PATCH 09/31] hooks: convert 'post-checkout' hook to hook library Ævar Arnfjörð Bjarmason
2021-05-28 12:11 ` [PATCH 10/31] merge: use config-based hooks for post-merge hook Ævar Arnfjörð Bjarmason
2021-05-28 12:11 ` [PATCH 11/31] git hook run: add an --ignore-missing flag Ævar Arnfjörð Bjarmason
2021-05-28 12:11 ` [PATCH 12/31] send-email: use 'git hook run' for 'sendemail-validate' Ævar Arnfjörð Bjarmason
2021-05-28 12:11 ` [PATCH 13/31] git-p4: use 'git hook' to run hooks Ævar Arnfjörð Bjarmason
2021-05-28 12:11 ` [PATCH 14/31] commit: use hook.h to execute hooks Ævar Arnfjörð Bjarmason
2021-05-28 12:11 ` [PATCH 15/31] read-cache: convert post-index-change hook to use config Ævar Arnfjörð Bjarmason
2021-05-28 12:11 ` [PATCH 16/31] receive-pack: convert push-to-checkout hook to hook.h Ævar Arnfjörð Bjarmason
2021-06-02 0:51 ` Felipe Contreras
2021-05-28 12:11 ` [PATCH 17/31] run-command: allow stdin for run_processes_parallel Ævar Arnfjörð Bjarmason
2021-05-28 12:11 ` [PATCH 18/31] hook: support passing stdin to hooks Ævar Arnfjörð Bjarmason
2021-05-28 12:11 ` [PATCH 19/31] am: convert 'post-rewrite' hook to hook.h Ævar Arnfjörð Bjarmason
2021-05-28 12:11 ` [PATCH 20/31] run-command: add stdin callback for parallelization Ævar Arnfjörð Bjarmason
2021-05-28 12:11 ` [PATCH 21/31] hook: provide stdin by string_list or callback Ævar Arnfjörð Bjarmason
2021-06-02 1:00 ` Felipe Contreras
2021-05-28 12:11 ` [PATCH 22/31] hook: convert 'post-rewrite' hook in sequencer.c to hook.h Ævar Arnfjörð Bjarmason
2021-05-28 12:11 ` [PATCH 23/31] transport: convert pre-push hook to use config Ævar Arnfjörð Bjarmason
2021-05-28 12:11 ` [PATCH 24/31] reference-transaction: use hook.h to run hooks Ævar Arnfjörð Bjarmason
2021-05-28 12:11 ` [PATCH 25/31] run-command: allow capturing of collated output Ævar Arnfjörð Bjarmason
2021-05-28 12:11 ` [PATCH 26/31] hooks: allow callers to capture output Ævar Arnfjörð Bjarmason
2021-05-28 12:11 ` [PATCH 27/31] receive-pack: convert 'update' hook to hook.h Ævar Arnfjörð Bjarmason
2021-06-02 1:04 ` Felipe Contreras
2021-05-28 12:11 ` [PATCH 28/31] post-update: use hook.h library Ævar Arnfjörð Bjarmason
2021-05-28 12:11 ` [PATCH 29/31] receive-pack: convert receive hooks to hook.h Ævar Arnfjörð Bjarmason
2021-05-28 12:11 ` [PATCH 30/31] hooks: fix a TOCTOU in "did we run a hook?" heuristic Ævar Arnfjörð Bjarmason
2021-05-28 12:48 ` Bagas Sanjaya
2021-05-28 14:11 ` Ævar Arnfjörð Bjarmason
2021-05-28 12:11 ` [PATCH 31/31] hook-list.h: add a generated list of hooks, like config-list.h Ævar Arnfjörð Bjarmason
2021-06-01 1:00 ` Ævar Arnfjörð Bjarmason
2021-06-01 18:14 ` [PATCH 00/31] minimal restart of "config-based-hooks" Emily Shaffer
2021-06-01 20:50 ` Derrick Stolee
2021-06-02 5:42 ` Felipe Contreras
2021-06-02 7:46 ` Ævar Arnfjörð Bjarmason
2021-06-02 9:34 ` Ævar Arnfjörð Bjarmason
2021-06-02 5:30 ` Felipe Contreras
2021-06-02 7:56 ` Ævar Arnfjörð Bjarmason
2021-06-02 9:39 ` Ævar Arnfjörð Bjarmason
2021-06-25 18:14 ` Felipe Contreras
2021-06-14 10:32 ` [PATCH v2 00/30] Minimal " Ævar Arnfjörð Bjarmason
2021-06-14 10:32 ` [PATCH v2 01/30] hook: add 'run' subcommand Ævar Arnfjörð Bjarmason
2021-06-14 21:33 ` Emily Shaffer
2021-06-15 9:36 ` Ævar Arnfjörð Bjarmason
2021-06-18 22:13 ` Emily Shaffer
2021-06-20 19:30 ` Ævar Arnfjörð Bjarmason
2021-06-21 3:44 ` Junio C Hamano
2021-06-22 0:00 ` Emily Shaffer
2021-06-29 1:12 ` Junio C Hamano
2021-06-25 19:02 ` Felipe Contreras
2021-06-25 19:08 ` Felipe Contreras
2021-06-14 10:32 ` [PATCH v2 02/30] run-command.h: move find_hook() to hook.h Ævar Arnfjörð Bjarmason
2021-06-14 10:32 ` [PATCH v2 03/30] hook.c: add a hook_exists() wrapper and use it in bugreport.c Ævar Arnfjörð Bjarmason
2021-06-14 10:32 ` [PATCH v2 04/30] gc: use hook library for pre-auto-gc hook Ævar Arnfjörð Bjarmason
2021-06-14 23:57 ` Emily Shaffer
2021-06-14 10:32 ` [PATCH v2 05/30] rebase: teach pre-rebase to use hook.h Ævar Arnfjörð Bjarmason
2021-06-14 10:32 ` [PATCH v2 06/30] am: convert applypatch hooks to use config Ævar Arnfjörð Bjarmason
2021-06-14 10:32 ` [PATCH v2 07/30] hooks: convert 'post-checkout' hook to hook library Ævar Arnfjörð Bjarmason
2021-06-14 10:32 ` [PATCH v2 08/30] merge: use config-based hooks for post-merge hook Ævar Arnfjörð Bjarmason
2021-06-14 10:32 ` [PATCH v2 09/30] git hook run: add an --ignore-missing flag Ævar Arnfjörð Bjarmason
2021-06-14 10:32 ` [PATCH v2 10/30] send-email: use 'git hook run' for 'sendemail-validate' Ævar Arnfjörð Bjarmason
2021-06-14 10:33 ` [PATCH v2 11/30] git-p4: use 'git hook' to run hooks Ævar Arnfjörð Bjarmason
2021-06-14 10:33 ` [PATCH v2 12/30] commit: use hook.h to execute hooks Ævar Arnfjörð Bjarmason
2021-06-14 10:33 ` [PATCH v2 13/30] read-cache: convert post-index-change hook to use config Ævar Arnfjörð Bjarmason
2021-06-25 18:32 ` Felipe Contreras
2021-06-14 10:33 ` [PATCH v2 14/30] receive-pack: convert push-to-checkout hook to hook.h Ævar Arnfjörð Bjarmason
2021-06-14 10:33 ` [PATCH v2 15/30] run-command: remove old run_hook_{le,ve}() hook API Ævar Arnfjörð Bjarmason
2021-06-25 18:34 ` Felipe Contreras
2021-06-14 10:33 ` [PATCH v2 16/30] run-command: allow stdin for run_processes_parallel Ævar Arnfjörð Bjarmason
2021-06-14 10:33 ` [PATCH v2 17/30] hook: support passing stdin to hooks Ævar Arnfjörð Bjarmason
2021-06-14 10:33 ` [PATCH v2 18/30] am: convert 'post-rewrite' hook to hook.h Ævar Arnfjörð Bjarmason
2021-06-14 10:33 ` [PATCH v2 19/30] run-command: add stdin callback for parallelization Ævar Arnfjörð Bjarmason
2021-06-14 10:33 ` [PATCH v2 20/30] hook: provide stdin by string_list or callback Ævar Arnfjörð Bjarmason
2021-06-14 10:33 ` [PATCH v2 21/30] hook: convert 'post-rewrite' hook in sequencer.c to hook.h Ævar Arnfjörð Bjarmason
2021-06-14 10:33 ` [PATCH v2 22/30] transport: convert pre-push hook to use config Ævar Arnfjörð Bjarmason
2021-06-14 10:33 ` [PATCH v2 23/30] reference-transaction: use hook.h to run hooks Ævar Arnfjörð Bjarmason
2021-06-14 10:33 ` [PATCH v2 24/30] run-command: allow capturing of collated output Ævar Arnfjörð Bjarmason
2021-06-14 10:33 ` [PATCH v2 25/30] hooks: allow callers to capture output Ævar Arnfjörð Bjarmason
2021-06-14 10:33 ` [PATCH v2 26/30] receive-pack: convert 'update' hook to hook.h Ævar Arnfjörð Bjarmason
2021-06-14 10:33 ` [PATCH v2 27/30] post-update: use hook.h library Ævar Arnfjörð Bjarmason
2021-06-14 10:33 ` [PATCH v2 28/30] receive-pack: convert receive hooks to hook.h Ævar Arnfjörð Bjarmason
2021-06-14 10:33 ` [PATCH v2 29/30] hooks: fix a TOCTOU in "did we run a hook?" heuristic Ævar Arnfjörð Bjarmason
2021-06-14 10:33 ` [PATCH v2 30/30] hook-list.h: add a generated list of hooks, like config-list.h Ævar Arnfjörð Bjarmason
2021-06-15 10:02 ` Ævar Arnfjörð Bjarmason
2021-06-14 20:22 ` [PATCH v2 00/30] Minimal restart of "config-based-hooks" Emily Shaffer
2021-06-16 0:45 ` Junio C Hamano
2021-06-17 10:22 ` [PATCH 00/27] Base for "config-based-hooks" Ævar Arnfjörð Bjarmason
2021-06-17 10:22 ` [PATCH 01/27] hook: add 'run' subcommand Ævar Arnfjörð Bjarmason
2021-06-17 10:22 ` [PATCH 02/27] gc: use hook library for pre-auto-gc hook Ævar Arnfjörð Bjarmason
2021-07-22 21:58 ` Emily Shaffer
2021-06-17 10:22 ` [PATCH 03/27] rebase: teach pre-rebase to use hook.h Ævar Arnfjörð Bjarmason
2021-06-17 10:22 ` [PATCH 04/27] am: convert applypatch hooks to use config Ævar Arnfjörð Bjarmason
2021-06-17 10:22 ` [PATCH 05/27] hooks: convert 'post-checkout' hook to hook library Ævar Arnfjörð Bjarmason
2021-06-17 10:22 ` [PATCH 06/27] merge: use config-based hooks for post-merge hook Ævar Arnfjörð Bjarmason
2021-06-17 10:22 ` [PATCH 07/27] git hook run: add an --ignore-missing flag Ævar Arnfjörð Bjarmason
2021-07-02 23:47 ` Emily Shaffer
2021-06-17 10:22 ` [PATCH 08/27] send-email: use 'git hook run' for 'sendemail-validate' Ævar Arnfjörð Bjarmason
2021-06-17 10:22 ` [PATCH 09/27] git-p4: use 'git hook' to run hooks Ævar Arnfjörð Bjarmason
2021-06-17 10:22 ` [PATCH 10/27] commit: use hook.h to execute hooks Ævar Arnfjörð Bjarmason
2021-06-17 10:22 ` [PATCH 11/27] read-cache: convert post-index-change hook to use config Ævar Arnfjörð Bjarmason
2021-06-17 10:22 ` [PATCH 12/27] receive-pack: convert push-to-checkout hook to hook.h Ævar Arnfjörð Bjarmason
2021-06-17 10:22 ` [PATCH 13/27] run-command: remove old run_hook_{le,ve}() hook API Ævar Arnfjörð Bjarmason
2021-06-17 10:22 ` [PATCH 14/27] run-command: allow stdin for run_processes_parallel Ævar Arnfjörð Bjarmason
2021-06-17 10:22 ` [PATCH 15/27] hook: support passing stdin to hooks Ævar Arnfjörð Bjarmason
2021-06-17 10:22 ` [PATCH 16/27] am: convert 'post-rewrite' hook to hook.h Ævar Arnfjörð Bjarmason
2021-06-17 10:22 ` [PATCH 17/27] run-command: add stdin callback for parallelization Ævar Arnfjörð Bjarmason
2021-06-17 10:22 ` [PATCH 18/27] hook: provide stdin by string_list or callback Ævar Arnfjörð Bjarmason
2021-06-17 10:22 ` [PATCH 19/27] hook: convert 'post-rewrite' hook in sequencer.c to hook.h Ævar Arnfjörð Bjarmason
2021-06-17 10:22 ` [PATCH 20/27] transport: convert pre-push hook to use config Ævar Arnfjörð Bjarmason
2021-06-17 10:22 ` [PATCH 21/27] reference-transaction: use hook.h to run hooks Ævar Arnfjörð Bjarmason
2021-06-17 10:22 ` [PATCH 22/27] run-command: allow capturing of collated output Ævar Arnfjörð Bjarmason
2021-06-17 10:22 ` [PATCH 23/27] hooks: allow callers to capture output Ævar Arnfjörð Bjarmason
2021-06-17 10:22 ` [PATCH 24/27] receive-pack: convert 'update' hook to hook.h Ævar Arnfjörð Bjarmason
2021-06-17 10:22 ` [PATCH 25/27] post-update: use hook.h library Ævar Arnfjörð Bjarmason
2021-06-17 10:23 ` [PATCH 26/27] receive-pack: convert receive hooks to hook.h Ævar Arnfjörð Bjarmason
2021-06-17 10:23 ` [PATCH 27/27] hooks: fix a TOCTOU in "did we run a hook?" heuristic Ævar Arnfjörð Bjarmason
2021-06-18 22:09 ` Emily Shaffer
2021-07-15 23:25 ` [PATCH 0/9] config-based hooks restarted Emily Shaffer
2021-07-15 23:25 ` [PATCH 1/9] hook: run a list of hooks instead Emily Shaffer
2021-07-15 23:25 ` [PATCH 2/9] hook: allow parallel hook execution Emily Shaffer
2021-07-16 8:36 ` Ævar Arnfjörð Bjarmason
2021-07-22 21:12 ` Emily Shaffer
2021-07-23 9:30 ` Ævar Arnfjörð Bjarmason
2021-07-15 23:25 ` [PATCH 3/9] hook: introduce "git hook list" Emily Shaffer
2021-07-16 8:52 ` Ævar Arnfjörð Bjarmason
2021-07-22 22:18 ` Emily Shaffer
2021-07-23 9:29 ` Ævar Arnfjörð Bjarmason
2021-07-15 23:25 ` [PATCH 4/9] hook: treat hookdir hook specially Emily Shaffer
2021-07-16 8:58 ` Ævar Arnfjörð Bjarmason
2021-07-22 22:24 ` Emily Shaffer
2021-07-23 9:26 ` Ævar Arnfjörð Bjarmason
2021-07-23 17:33 ` Felipe Contreras
2021-07-23 18:22 ` Eric Sunshine
2021-07-23 20:02 ` Felipe Contreras
2021-07-15 23:25 ` [PATCH 5/9] hook: allow running non-native hooks Emily Shaffer
2021-07-15 23:26 ` [PATCH 6/9] hook: include hooks from the config Emily Shaffer
2021-07-16 9:01 ` Ævar Arnfjörð Bjarmason
2021-07-22 22:51 ` Emily Shaffer
2021-07-23 9:22 ` Ævar Arnfjörð Bjarmason
2021-07-15 23:26 ` [PATCH 7/9] hook: allow out-of-repo 'git hook' invocations Emily Shaffer
2021-07-16 8:33 ` Ævar Arnfjörð Bjarmason
2021-07-22 23:07 ` Emily Shaffer
2021-07-23 9:18 ` Ævar Arnfjörð Bjarmason
2021-07-15 23:26 ` [PATCH 8/9] hook: teach 'hookcmd' config to alias hook scripts Emily Shaffer
2021-07-16 9:13 ` Ævar Arnfjörð Bjarmason
2021-07-22 23:31 ` Emily Shaffer
2021-07-23 7:41 ` Ævar Arnfjörð Bjarmason
2021-08-04 20:38 ` Emily Shaffer
2021-08-05 0:17 ` Ævar Arnfjörð Bjarmason
2021-08-05 21:45 ` Emily Shaffer
2021-08-05 22:26 ` Ævar Arnfjörð Bjarmason
2021-08-06 20:18 ` Emily Shaffer
2021-08-04 21:49 ` Jonathan Tan
2021-07-15 23:26 ` [PATCH 9/9] hook: implement hookcmd.<name>.skip Emily Shaffer
2021-07-28 20:39 ` [PATCH 00/27] Base for "config-based-hooks" Emily Shaffer
2021-08-03 19:38 ` [PATCH v4 00/36] Run hooks via "git run hook" & hook library Ævar Arnfjörð Bjarmason
2021-08-03 19:38 ` [PATCH v4 01/36] Makefile: mark "check" target as .PHONY Ævar Arnfjörð Bjarmason
2021-08-20 0:04 ` Emily Shaffer
2021-08-03 19:38 ` [PATCH v4 02/36] Makefile: stop hardcoding {command,config}-list.h Ævar Arnfjörð Bjarmason
2021-08-20 0:03 ` Emily Shaffer
2021-08-24 14:22 ` Ævar Arnfjörð Bjarmason
2021-08-03 19:38 ` [PATCH v4 03/36] Makefile: remove an out-of-date comment Ævar Arnfjörð Bjarmason
2021-08-20 0:05 ` Emily Shaffer
2021-08-03 19:38 ` [PATCH v4 04/36] hook.[ch]: move find_hook() to this new library Ævar Arnfjörð Bjarmason
2021-08-20 0:08 ` Emily Shaffer
2021-08-03 19:38 ` [PATCH v4 05/36] hook.c: add a hook_exists() wrapper and use it in bugreport.c Ævar Arnfjörð Bjarmason
2021-08-20 0:09 ` Emily Shaffer
2021-08-03 19:38 ` [PATCH v4 06/36] hook.c users: use "hook_exists()" insted of "find_hook()" Ævar Arnfjörð Bjarmason
2021-08-20 0:10 ` Emily Shaffer
2021-08-03 19:38 ` [PATCH v4 07/36] hook-list.h: add a generated list of hooks, like config-list.h Ævar Arnfjörð Bjarmason
2021-08-03 19:38 ` [PATCH v4 08/36] hook: add 'run' subcommand Ævar Arnfjörð Bjarmason
2021-08-04 10:15 ` Ævar Arnfjörð Bjarmason
2021-08-03 19:38 ` [PATCH v4 09/36] gc: use hook library for pre-auto-gc hook Ævar Arnfjörð Bjarmason
2021-08-03 19:38 ` [PATCH v4 10/36] rebase: convert pre-rebase to use hook.h Ævar Arnfjörð Bjarmason
2021-08-03 19:38 ` [PATCH v4 11/36] am: convert applypatch " Ævar Arnfjörð Bjarmason
2021-08-03 19:38 ` [PATCH v4 12/36] hooks: convert 'post-checkout' hook to hook library Ævar Arnfjörð Bjarmason
2021-08-03 19:38 ` [PATCH v4 13/36] merge: convert post-merge to use hook.h Ævar Arnfjörð Bjarmason
2021-08-03 19:38 ` [PATCH v4 14/36] git hook run: add an --ignore-missing flag Ævar Arnfjörð Bjarmason
2021-08-03 19:38 ` [PATCH v4 15/36] send-email: use 'git hook run' for 'sendemail-validate' Ævar Arnfjörð Bjarmason
2021-08-03 19:38 ` [PATCH v4 16/36] git-p4: use 'git hook' to run hooks Ævar Arnfjörð Bjarmason
2021-08-03 19:38 ` [PATCH v4 17/36] commit: convert {pre-commit,prepare-commit-msg} hook to hook.h Ævar Arnfjörð Bjarmason
2021-08-03 19:38 ` [PATCH v4 18/36] read-cache: convert post-index-change to use hook.h Ævar Arnfjörð Bjarmason
2021-08-03 19:38 ` [PATCH v4 19/36] receive-pack: convert push-to-checkout hook to hook.h Ævar Arnfjörð Bjarmason
2021-08-03 19:38 ` [PATCH v4 20/36] run-command: remove old run_hook_{le,ve}() hook API Ævar Arnfjörð Bjarmason
2021-08-03 19:38 ` [PATCH v4 21/36] run-command: allow stdin for run_processes_parallel Ævar Arnfjörð Bjarmason
2021-08-03 19:38 ` [PATCH v4 22/36] hook: support passing stdin to hooks Ævar Arnfjörð Bjarmason
2021-08-03 19:38 ` [PATCH v4 23/36] am: convert 'post-rewrite' hook to hook.h Ævar Arnfjörð Bjarmason
2021-08-03 19:38 ` [PATCH v4 24/36] run-command: add stdin callback for parallelization Ævar Arnfjörð Bjarmason
2021-08-03 19:38 ` [PATCH v4 25/36] hook: provide stdin by string_list or callback Ævar Arnfjörð Bjarmason
2021-08-03 19:38 ` [PATCH v4 26/36] hook: convert 'post-rewrite' hook in sequencer.c to hook.h Ævar Arnfjörð Bjarmason
2021-08-03 19:38 ` [PATCH v4 27/36] transport: convert pre-push hook " Ævar Arnfjörð Bjarmason
2021-08-03 19:38 ` [PATCH v4 28/36] hook tests: test for exact "pre-push" hook input Ævar Arnfjörð Bjarmason
2021-08-20 0:16 ` Emily Shaffer
2021-08-03 19:38 ` [PATCH v4 29/36] hook tests: use a modern style for "pre-push" tests Ævar Arnfjörð Bjarmason
2021-08-20 0:18 ` Emily Shaffer
2021-08-03 19:38 ` [PATCH v4 30/36] reference-transaction: use hook.h to run hooks Ævar Arnfjörð Bjarmason
2021-08-03 19:38 ` [PATCH v4 31/36] run-command: allow capturing of collated output Ævar Arnfjörð Bjarmason
2021-08-03 19:38 ` [PATCH v4 32/36] hooks: allow callers to capture output Ævar Arnfjörð Bjarmason
2021-08-03 19:38 ` [PATCH v4 33/36] receive-pack: convert 'update' hook to hook.h Ævar Arnfjörð Bjarmason
2021-08-03 19:39 ` [PATCH v4 34/36] post-update: use hook.h library Ævar Arnfjörð Bjarmason
2021-08-03 19:39 ` [PATCH v4 35/36] receive-pack: convert receive hooks to hook.h Ævar Arnfjörð Bjarmason
2021-08-03 19:39 ` [PATCH v4 36/36] hooks: fix a TOCTOU in "did we run a hook?" heuristic Ævar Arnfjörð Bjarmason
2021-08-12 0:42 ` [PATCH v2 0/6] config-based hooks restarted Emily Shaffer
2021-08-12 0:42 ` [PATCH v2 1/6] hook: run a list of hooks instead Emily Shaffer
2021-08-12 17:25 ` Junio C Hamano
2021-08-16 23:38 ` Emily Shaffer
2021-08-12 0:42 ` [PATCH v2 2/6] hook: allow parallel hook execution Emily Shaffer
2021-08-12 17:51 ` Junio C Hamano
2021-08-16 23:59 ` Emily Shaffer
2021-08-12 0:42 ` [PATCH v2 3/6] hook: introduce "git hook list" Emily Shaffer
2021-08-12 18:59 ` Junio C Hamano
2021-08-17 0:36 ` Emily Shaffer
2021-08-12 0:42 ` [PATCH v2 4/6] hook: allow running non-native hooks Emily Shaffer
2021-08-12 19:08 ` Junio C Hamano
2021-08-18 20:51 ` Emily Shaffer
2021-08-18 21:14 ` Emily Shaffer
2021-08-18 21:24 ` Junio C Hamano
2021-08-12 0:42 ` [PATCH v2 5/6] hook: include hooks from the config Emily Shaffer
2021-08-12 20:48 ` Junio C Hamano
2021-08-19 0:09 ` Emily Shaffer
2021-08-12 0:42 ` [PATCH v2 6/6] hook: allow out-of-repo 'git hook' invocations Emily Shaffer
2021-08-12 4:47 ` [PATCH v2 0/6] config-based hooks restarted Junio C Hamano
2021-08-12 5:02 ` Junio C Hamano
2021-08-16 22:31 ` Emily Shaffer
2021-08-19 3:34 ` [PATCH v3 " Emily Shaffer
2021-08-19 3:34 ` [PATCH v3 1/6] hook: run a list of hooks instead Emily Shaffer
2021-08-24 14:56 ` Ævar Arnfjörð Bjarmason
2021-08-26 21:16 ` Emily Shaffer
2021-08-27 11:15 ` Ævar Arnfjörð Bjarmason
2021-08-19 3:34 ` [PATCH v3 2/6] hook: allow parallel hook execution Emily Shaffer
2021-08-24 15:01 ` Ævar Arnfjörð Bjarmason
2021-08-24 16:13 ` Eric Sunshine
2021-08-26 22:36 ` Emily Shaffer
2021-08-19 3:34 ` [PATCH v3 3/6] hook: introduce "git hook list" Emily Shaffer
2021-08-24 15:08 ` Ævar Arnfjörð Bjarmason
2021-08-26 21:43 ` Emily Shaffer
2021-08-24 15:53 ` Ævar Arnfjörð Bjarmason
2021-08-26 22:38 ` Emily Shaffer
2021-08-19 3:34 ` [PATCH v3 4/6] hook: allow running non-native hooks Emily Shaffer
2021-08-24 15:55 ` Ævar Arnfjörð Bjarmason
2021-08-26 22:50 ` Emily Shaffer
2021-08-27 0:22 ` Junio C Hamano
2021-08-19 3:34 ` [PATCH v3 5/6] hook: include hooks from the config Emily Shaffer
2021-08-19 22:39 ` Junio C Hamano
2021-08-19 23:43 ` Emily Shaffer
2021-08-19 23:48 ` Junio C Hamano
2021-08-24 19:30 ` Ævar Arnfjörð Bjarmason
2021-08-31 19:05 ` Emily Shaffer
2021-08-19 3:34 ` [PATCH v3 6/6] hook: allow out-of-repo 'git hook' invocations Emily Shaffer
2021-08-24 20:12 ` Ævar Arnfjörð Bjarmason
2021-08-24 20:38 ` Randall S. Becker
2021-08-24 22:45 ` Ævar Arnfjörð Bjarmason
2021-08-31 21:09 ` Emily Shaffer
2021-08-24 20:29 ` [PATCH v3 0/6] config-based hooks restarted Ævar Arnfjörð Bjarmason
2021-09-02 22:01 ` Emily Shaffer
2021-09-09 12:41 ` [PATCH v4 0/5] " Ævar Arnfjörð Bjarmason
2021-09-09 12:41 ` [PATCH v4 1/5] hook: run a list of hooks instead Ævar Arnfjörð Bjarmason
2021-09-09 12:59 ` [PATCH v4] fixup! " Ævar Arnfjörð Bjarmason
2021-09-09 12:42 ` [PATCH v4 2/5] hook: allow parallel hook execution Ævar Arnfjörð Bjarmason
2021-09-09 12:42 ` [PATCH v4 3/5] hook: introduce "git hook list" Ævar Arnfjörð Bjarmason
2021-09-09 12:42 ` [PATCH v4 4/5] hook: include hooks from the config Ævar Arnfjörð Bjarmason
2021-09-09 12:42 ` [PATCH v4 5/5] hook: allow out-of-repo 'git hook' invocations Ævar Arnfjörð Bjarmason
2021-08-19 0:17 ` [PATCH v4 00/36] Run hooks via "git run hook" & hook library Emily Shaffer
2021-08-19 23:40 ` Emily Shaffer [this message]
2021-09-02 7:21 ` Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 " Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 01/36] Makefile: mark "check" target as .PHONY Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 02/36] Makefile: stop hardcoding {command,config}-list.h Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 03/36] Makefile: remove an out-of-date comment Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 04/36] hook.[ch]: move find_hook() from run-command.c to hook.c Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 05/36] hook.c: add a hook_exists() wrapper and use it in bugreport.c Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 06/36] hook.c users: use "hook_exists()" instead of "find_hook()" Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 07/36] hook-list.h: add a generated list of hooks, like config-list.h Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 08/36] hook: add 'run' subcommand Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 09/36] gc: use hook library for pre-auto-gc hook Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 10/36] rebase: convert pre-rebase to use hook.h Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 11/36] am: convert applypatch " Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 12/36] hooks: convert 'post-checkout' hook to hook library Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 13/36] merge: convert post-merge to use hook.h Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 14/36] git hook run: add an --ignore-missing flag Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 15/36] send-email: use 'git hook run' for 'sendemail-validate' Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 16/36] git-p4: use 'git hook' to run hooks Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 17/36] commit: convert {pre-commit,prepare-commit-msg} hook to hook.h Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 18/36] read-cache: convert post-index-change to use hook.h Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 19/36] receive-pack: convert push-to-checkout hook to hook.h Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 20/36] run-command: remove old run_hook_{le,ve}() hook API Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 21/36] run-command: allow stdin for run_processes_parallel Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 22/36] hook: support passing stdin to hooks Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 23/36] am: convert 'post-rewrite' hook to hook.h Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 24/36] run-command: add stdin callback for parallelization Ævar Arnfjörð Bjarmason
2021-10-06 11:03 ` ab/config-based-hooks-N status (was Re: [PATCH v5 24/36] run-command: add stdin callback for parallelization) Ævar Arnfjörð Bjarmason
2021-10-12 12:59 ` Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 25/36] hook: provide stdin by string_list or callback Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 26/36] hook: convert 'post-rewrite' hook in sequencer.c to hook.h Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 27/36] transport: convert pre-push hook " Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 28/36] hook tests: test for exact "pre-push" hook input Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 29/36] hook tests: use a modern style for "pre-push" tests Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 30/36] reference-transaction: use hook.h to run hooks Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 31/36] run-command: allow capturing of collated output Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 32/36] hooks: allow callers to capture output Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 33/36] receive-pack: convert 'update' hook to hook.h Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 34/36] post-update: use hook.h library Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 35/36] receive-pack: convert receive hooks to hook.h Ævar Arnfjörð Bjarmason
2021-09-02 13:11 ` [PATCH v5 36/36] hooks: fix a TOCTOU in "did we run a hook?" heuristic Ævar Arnfjörð Bjarmason
2021-06-25 18:22 ` [PATCH v2 00/30] Minimal restart of "config-based-hooks" Felipe Contreras
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YR7r3h1AG4Zyn7x7@google.com \
--to=emilyshaffer@google.com \
--cc=avarab@gmail.com \
--cc=felipe.contreras@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jonathantanmy@google.com \
--cc=me@ttaylorr.com \
--cc=peff@peff.net \
--cc=sandals@crustytoothpaste.net \
--cc=steadmon@google.com \
--cc=stolee@gmail.com \
--cc=sunshine@sunshineco.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).