@@ -58,6 +58,9 @@ the message file.
The default 'applypatch-msg' hook, when enabled, runs the
'commit-msg' hook, if the latter is enabled.
+Hooks run during 'applypatch-msg' will not be parallelized, because hooks are
+expected to edit the file holding the commit log message.
+
pre-applypatch
~~~~~~~~~~~~~~
@@ -73,6 +76,9 @@ make a commit if it does not pass certain test.
The default 'pre-applypatch' hook, when enabled, runs the
'pre-commit' hook, if the latter is enabled.
+Hooks run during 'pre-applypatch' will be run in parallel, unless hook.jobs is
+configured to 1.
+
post-applypatch
~~~~~~~~~~~~~~~
@@ -82,6 +88,9 @@ and is invoked after the patch is applied and a commit is made.
This hook is meant primarily for notification, and cannot affect
the outcome of `git am`.
+Hooks run during 'post-applypatch' will be run in parallel, unless hook.jobs is
+configured to 1.
+
pre-commit
~~~~~~~~~~
@@ -33,6 +33,7 @@
#include "string-list.h"
#include "packfile.h"
#include "repository.h"
+#include "hook.h"
/**
* Returns the length of the first line of msg.
@@ -444,9 +445,14 @@ static void am_destroy(const struct am_state *state)
static int run_applypatch_msg_hook(struct am_state *state)
{
int ret;
+ struct run_hooks_opt opt;
+
+ run_hooks_opt_init_sync(&opt);
assert(state->msg);
- ret = run_hook_le(NULL, "applypatch-msg", am_path(state, "final-commit"), NULL);
+ strvec_push(&opt.args, am_path(state, "final-commit"));
+ ret = run_hooks("applypatch-msg", &opt);
+ run_hooks_opt_clear(&opt);
if (!ret) {
FREE_AND_NULL(state->msg);
@@ -1606,9 +1612,16 @@ static void do_commit(const struct am_state *state)
struct commit_list *parents = NULL;
const char *reflog_msg, *author, *committer = NULL;
struct strbuf sb = STRBUF_INIT;
+ struct run_hooks_opt hook_opt;
+
+ run_hooks_opt_init_async(&hook_opt);
- if (run_hook_le(NULL, "pre-applypatch", NULL))
+ if (run_hooks("pre-applypatch", &hook_opt)) {
+ run_hooks_opt_clear(&hook_opt);
exit(1);
+ }
+
+ run_hooks_opt_clear(&hook_opt);
if (write_cache_as_tree(&tree, 0, NULL))
die(_("git write-tree failed to write a tree"));
@@ -1659,8 +1672,10 @@ static void do_commit(const struct am_state *state)
fclose(fp);
}
- run_hook_le(NULL, "post-applypatch", NULL);
+ run_hooks_opt_init_async(&hook_opt);
+ run_hooks("post-applypatch", &hook_opt);
+ run_hooks_opt_clear(&hook_opt);
strbuf_release(&sb);
}
Teach pre-applypatch, post-applypatch, and applypatch-msg to use the hook.h library instead of the run-command.h library. This enables use of hooks specified in the config, in addition to those in the hookdir. These three hooks are called only by builtin/am.c. Signed-off-by: Emily Shaffer <emilyshaffer@google.com> --- Documentation/githooks.txt | 9 +++++++++ builtin/am.c | 21 ++++++++++++++++++--- 2 files changed, 27 insertions(+), 3 deletions(-)