@@ -231,6 +231,8 @@ This hook can be used to perform repository validity checks, auto-display
differences from the previous HEAD if different, or set working dir metadata
properties.
+Hooks executed during 'post-checkout' will not be parallelized.
+
post-merge
~~~~~~~~~~
@@ -9,6 +9,7 @@
#include "config.h"
#include "diff.h"
#include "dir.h"
+#include "hook.h"
#include "ll-merge.h"
#include "lockfile.h"
#include "merge-recursive.h"
@@ -106,13 +107,21 @@ struct branch_info {
static int post_checkout_hook(struct commit *old_commit, struct commit *new_commit,
int changed)
{
- return run_hook_le(NULL, "post-checkout",
- oid_to_hex(old_commit ? &old_commit->object.oid : null_oid()),
- oid_to_hex(new_commit ? &new_commit->object.oid : null_oid()),
- changed ? "1" : "0", NULL);
+ struct run_hooks_opt opt;
+ int rc;
+
+ run_hooks_opt_init_sync(&opt);
+
/* "new_commit" can be NULL when checking out from the index before
a commit exists. */
-
+ strvec_pushl(&opt.args,
+ oid_to_hex(old_commit ? &old_commit->object.oid : null_oid()),
+ oid_to_hex(new_commit ? &new_commit->object.oid : null_oid()),
+ changed ? "1" : "0",
+ NULL);
+ rc = run_hooks("post-checkout", &opt);
+ run_hooks_opt_clear(&opt);
+ return rc;
}
static int update_some(const struct object_id *oid, struct strbuf *base,
@@ -32,6 +32,7 @@
#include "connected.h"
#include "packfile.h"
#include "list-objects-filter-options.h"
+#include "hook.h"
/*
* Overall FIXMEs:
@@ -775,6 +776,7 @@ static int checkout(int submodule_progress)
struct tree *tree;
struct tree_desc t;
int err = 0;
+ struct run_hooks_opt hook_opt;
if (option_no_checkout)
return 0;
@@ -820,8 +822,10 @@ static int checkout(int submodule_progress)
if (write_locked_index(&the_index, &lock_file, COMMIT_LOCK))
die(_("unable to write new index file"));
- err |= run_hook_le(NULL, "post-checkout", oid_to_hex(null_oid()),
- oid_to_hex(&oid), "1", NULL);
+ run_hooks_opt_init_sync(&hook_opt);
+ strvec_pushl(&hook_opt.args, oid_to_hex(null_oid()), oid_to_hex(&oid), "1", NULL);
+ err |= run_hooks("post-checkout", &hook_opt);
+ run_hooks_opt_clear(&hook_opt);
if (!err && (option_recurse_submodules.nr > 0)) {
struct strvec args = STRVEC_INIT;
@@ -13,6 +13,7 @@
#include "utf8.h"
#include "worktree.h"
#include "quote.h"
+#include "hook.h"
static const char * const worktree_usage[] = {
N_("git worktree add [<options>] <path> [<commit-ish>]"),
@@ -381,22 +382,21 @@ static int add_worktree(const char *path, const char *refname,
* 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 };
- cp.git_cmd = 0;
- cp.no_stdin = 1;
- cp.stdout_to_stderr = 1;
- cp.dir = path;
- cp.env = env;
- cp.argv = NULL;
- 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_sync(&opt);
+
+ 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("post-checkout", &opt);
+
+ run_hooks_opt_clear(&opt);
}
strvec_clear(&child_env);
@@ -27,7 +27,6 @@
#include "progress.h"
#include "sparse-index.h"
#include "hook.h"
->>>>>>> 9524a9d29d (read-cache: convert post-index-change hook to use config)
/* Mask for the name length in ce_flags in the on-disk index */
@@ -7,6 +7,7 @@
#include "tree-walk.h"
#include "tree.h"
#include "unpack-trees.h"
+#include "hook.h"
int reset_head(struct repository *r, struct object_id *oid, const char *action,
const char *switch_to_branch, unsigned flags,
@@ -126,10 +127,18 @@ int reset_head(struct repository *r, struct object_id *oid, const char *action,
ret = create_symref("HEAD", switch_to_branch,
reflog_head);
}
- if (run_hook)
- run_hook_le(NULL, "post-checkout",
- oid_to_hex(orig ? orig : null_oid()),
- oid_to_hex(oid), "1", NULL);
+ if (run_hook) {
+ struct run_hooks_opt opt;
+
+ run_hooks_opt_init_sync(&opt);
+ strvec_pushl(&opt.args,
+ oid_to_hex(orig ? orig : null_oid()),
+ oid_to_hex(oid),
+ "1",
+ NULL);
+ run_hooks("post-checkout", &opt);
+ run_hooks_opt_clear(&opt);
+ }
leave_reset_head:
strbuf_release(&msg);
By using the 'hook.h' library, 'post-checkout' hooks can now be specified in the config as well as in the hook directory. Signed-off-by: Emily Shaffer <emilyshaffer@google.com> --- Documentation/githooks.txt | 2 ++ builtin/checkout.c | 19 ++++++++++++++----- builtin/clone.c | 8 ++++++-- builtin/worktree.c | 32 ++++++++++++++++---------------- read-cache.c | 1 - reset.c | 17 +++++++++++++---- 6 files changed, 51 insertions(+), 28 deletions(-)