hooks: convert worktree 'post-checkout' hook to hook library
Move the running of the 'post-checkout' hook away from run-command.h to the new hook.h library in builtin/worktree.c. For this special case we need a change to the hook API to teach it to run the hook from a given directory. We cannot skip the "absolute_path" flag and just check if "dir" is specified as we'd then fail to find our hook in the new dir we'd chdir() to. We currently don't have a use-case for running a hook not in our "base" repository at a given absolute path, so let's have "dir" imply absolute_path(find_hook(hook_name)). Signed-off-by: Emily Shaffer <emilyshaffer@google.com> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Acked-by: Emily Shaffer <emilyshaffer@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
72ddf34d7c
commit
1a3017d908
@ -382,21 +382,17 @@ done:
|
||||
* is_junk is cleared, but do return appropriate code when hook fails.
|
||||
*/
|
||||
if (!ret && opts->checkout) {
|
||||
const char *hook = find_hook("post-checkout");
|
||||
if (hook) {
|
||||
const char *env[] = { "GIT_DIR", "GIT_WORK_TREE", NULL };
|
||||
struct child_process cp = CHILD_PROCESS_INIT;
|
||||
cp.no_stdin = 1;
|
||||
cp.stdout_to_stderr = 1;
|
||||
cp.dir = path;
|
||||
strvec_pushv(&cp.env_array, env);
|
||||
cp.trace2_hook_name = "post-checkout";
|
||||
strvec_pushl(&cp.args, absolute_path(hook),
|
||||
oid_to_hex(null_oid()),
|
||||
oid_to_hex(&commit->object.oid),
|
||||
"1", NULL);
|
||||
ret = run_command(&cp);
|
||||
}
|
||||
struct run_hooks_opt opt = RUN_HOOKS_OPT_INIT;
|
||||
|
||||
strvec_pushl(&opt.env, "GIT_DIR", "GIT_WORK_TREE", NULL);
|
||||
strvec_pushl(&opt.args,
|
||||
oid_to_hex(null_oid()),
|
||||
oid_to_hex(&commit->object.oid),
|
||||
"1",
|
||||
NULL);
|
||||
opt.dir = path;
|
||||
|
||||
ret = run_hooks_opt("post-checkout", &opt);
|
||||
}
|
||||
|
||||
strvec_clear(&child_env);
|
||||
|
Reference in New Issue
Block a user