@@ -564,6 +564,7 @@ that switches branches while
keeping the local changes in the working tree that do not interfere
with the difference between the branches.
+Hooks executed during 'push-to-checkout' will not be parallelized.
pre-auto-gc
~~~~~~~~~~~
@@ -29,6 +29,7 @@
#include "commit-reach.h"
#include "worktree.h"
#include "shallow.h"
+#include "hook.h"
static const char * const receive_pack_usage[] = {
N_("git receive-pack <git-dir>"),
@@ -1435,12 +1436,20 @@ static const char *push_to_checkout(unsigned char *hash,
struct strvec *env,
const char *work_tree)
{
+ struct run_hooks_opt opt;
+
+ run_hooks_opt_init_sync(&opt);
+
strvec_pushf(env, "GIT_WORK_TREE=%s", absolute_path(work_tree));
- if (run_hook_le(env->v, push_to_checkout_hook,
- hash_to_hex(hash), NULL))
+ strvec_pushv(&opt.env, env->v);
+ strvec_push(&opt.args, hash_to_hex(hash));
+ if (run_hooks(push_to_checkout_hook, &opt)) {
+ run_hooks_opt_clear(&opt);
return "push-to-checkout hook declined";
- else
+ } else {
+ run_hooks_opt_clear(&opt);
return NULL;
+ }
}
static const char *update_worktree(unsigned char *sha1, const struct worktree *worktree)
@@ -1464,7 +1473,7 @@ static const char *update_worktree(unsigned char *sha1, const struct worktree *w
strvec_pushf(&env, "GIT_DIR=%s", absolute_path(git_dir));
- if (!find_hook(push_to_checkout_hook))
+ if (!hook_exists(push_to_checkout_hook, HOOKDIR_USE_CONFIG))
retval = push_to_deploy(sha1, &env, work_tree);
else
retval = push_to_checkout(sha1, &env, work_tree);
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. Signed-off-by: Emily Shaffer <emilyshaffer@google.com> --- Documentation/githooks.txt | 1 + builtin/receive-pack.c | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-)