From: Junio C Hamano <gitster@pobox.com>
To: git@vger.kernel.org
Subject: Re: [PATCH 8/8] checkout: move post_checkout_hook() to checkout.c
Date: Fri, 28 Aug 2026 19:05:11 -0700 [thread overview]
Message-ID: <xmqqse3x1y20.fsf@gitster.g> (raw)
In-Reply-To: <xmqq7bl93lbk.fsf@gitster.g> (Junio C. Hamano's message of "Fri, 28 Aug 2026 15:57:19 -0700")
Junio C Hamano <gitster@pobox.com> writes:
> Not a very good illustration. We should teach the caller to pass
> "struct repository *repo" to this function, and then teach this
> function to learn what hash algorithm to use from the given
> repository instance.
I've locally amended this step like so.
The dependency on 'the_repository' has been removed. While OK when
the helper was in builtin/checkout.c as an integral part of 'git
checkout' (and 'git restore'), this is no longer true for a common
utility function. So it now takes a pointer to 'struct repository'
and uses its associated hash algorithm.
diff --git a/builtin/checkout.c b/builtin/checkout.c
index 9771c848c5..c6e29e9526 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -124,24 +124,6 @@ static void branch_info_release(struct branch_info *info)
free(info->checkout);
}
-static int post_checkout_hook(struct commit *old_commit, struct commit *new_commit,
- int changed)
-{
- struct run_hooks_opt opt = RUN_HOOKS_OPT_INIT_FORCE_SERIAL;
-
- /*
- * "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(the_hash_algo)),
- oid_to_hex(new_commit ? &new_commit->object.oid : null_oid(the_hash_algo)),
- changed ? "1" : "0",
- NULL);
-
- return run_hooks_opt(the_repository, "post-checkout", &opt);
-}
-
/*
* Handle a tree object and determine if we need to recurse into the
* tree (READ_TREE_RECURSIVE) or skip it (0).
@@ -718,7 +700,7 @@ static int checkout_paths(const struct checkout_opts *opts,
&rev, NULL);
head = lookup_commit_reference_gently(the_repository, &rev, 1);
- errs |= post_checkout_hook(head, head, 0);
+ errs |= post_checkout_hook(the_repository, head, head, 0);
return errs;
}
@@ -1273,7 +1255,8 @@ static int switch_branches(const struct checkout_opts *opts,
}
}
- ret = post_checkout_hook(old_branch_info.commit, new_branch_info->commit, 1);
+ ret = post_checkout_hook(the_repository,
+ old_branch_info.commit, new_branch_info->commit, 1);
branch_info_release(&old_branch_info);
strbuf_release(&old_commit_shortname);
strbuf_release(&autostash_msg);
diff --git a/checkout.c b/checkout.c
index 1588b116ee..28c5c18d96 100644
--- a/checkout.c
+++ b/checkout.c
@@ -1,6 +1,9 @@
#define USE_THE_REPOSITORY_VARIABLE
#include "git-compat-util.h"
+#include "commit.h"
+#include "hex.h"
+#include "hook.h"
#include "object-name.h"
#include "remote.h"
#include "refspec.h"
@@ -8,6 +11,7 @@
#include "checkout.h"
#include "config.h"
#include "strbuf.h"
+#include "strvec.h"
struct tracking_name_data {
/* const */ char *src_ref;
@@ -73,3 +77,27 @@ char *unique_tracking_name(const char *name, struct object_id *oid,
}
return NULL;
}
+
+int post_checkout_hook(struct repository *repo,
+ struct commit *old_commit, struct commit *new_commit,
+ int changed)
+{
+ struct run_hooks_opt opt = RUN_HOOKS_OPT_INIT_FORCE_SERIAL;
+ const struct git_hash_algo *hash_algo = repo->hash_algo;
+
+ /*
+ * "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(hash_algo)),
+ oid_to_hex(new_commit ?
+ &new_commit->object.oid
+ : null_oid(hash_algo)),
+ changed ? "1" : "0",
+ NULL);
+
+ return run_hooks_opt(repo, "post-checkout", &opt);
+}
diff --git a/checkout.h b/checkout.h
index 55920e7aeb..6d8d2c2bab 100644
--- a/checkout.h
+++ b/checkout.h
@@ -3,6 +3,9 @@
#include "hash.h"
+struct commit;
+struct repository;
+
/*
* Check if the branch name uniquely matches a branch name on a remote
* tracking branch. Return the name of the remote if such a branch
@@ -12,4 +15,11 @@ char *unique_tracking_name(const char *name,
struct object_id *oid,
int *dwim_remotes_matched);
+/*
+ * Run the post-checkout hook.
+ */
+int post_checkout_hook(struct repository *,
+ struct commit *old_commit, struct commit *new_commit,
+ int changed);
+
#endif /* CHECKOUT_H */
--
2.55.0-884-g76cf8659c2
next prev parent reply other threads:[~2026-08-29 2:05 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-27 18:29 [PATCH] builtin: replace the_repository parameter in is_bare_repository() Hardik Kumar
2026-08-27 19:09 ` Junio C Hamano
2026-08-27 19:51 ` Junio C Hamano
2026-08-27 20:09 ` Hardik Kumar
2026-08-27 20:28 ` Junio C Hamano
2026-08-27 21:12 ` Ben Knoble
2026-08-27 21:39 ` Junio C Hamano
2026-08-28 11:41 ` D. Ben Knoble
2026-08-28 22:51 ` Junio C Hamano
2026-08-28 22:51 ` [PATCH 0/8] More sensible checkout/switch/restore code refactoring Junio C Hamano
2026-08-28 22:51 ` [PATCH 1/8] checkout: pass cb_option explicitly to branch name parsers Junio C Hamano
2026-08-28 22:52 ` [PATCH 2/8] checkout: validate new branch name in checkout_branch() Junio C Hamano
2026-08-28 22:52 ` [PATCH 3/8] checkout: validate stage and merge option compatibility in checkout_paths() Junio C Hamano
2026-08-28 22:52 ` [PATCH 4/8] checkout: extract option validation and pathspec helpers Junio C Hamano
2026-08-28 22:52 ` [PATCH 5/8] checkout: extract branch setup and tracking helpers Junio C Hamano
2026-08-28 22:52 ` [PATCH 6/8] checkout: restructure switch, restore, and checkout entrypoints Junio C Hamano
2026-08-28 22:52 ` [PATCH 7/8] checkout: wrap overly long lines Junio C Hamano
2026-08-28 22:55 ` Junio C Hamano
2026-08-29 2:06 ` Junio C Hamano
2026-08-28 22:52 ` [PATCH 8/8] checkout: move post_checkout_hook() to checkout.c Junio C Hamano
2026-08-28 22:57 ` Junio C Hamano
2026-08-29 2:05 ` Junio C Hamano [this message]
2026-08-30 20:48 ` [PATCH v2 0/8] More sensible checkout/switch/restore code refactoring Junio C Hamano
2026-08-30 20:48 ` [PATCH v2 1/8] checkout: pass cb_option explicitly to branch name parsers Junio C Hamano
2026-09-01 11:31 ` Karthik Nayak
2026-08-30 20:48 ` [PATCH v2 2/8] checkout: validate new branch name in checkout_branch() Junio C Hamano
2026-09-01 11:36 ` Karthik Nayak
2026-08-30 20:48 ` [PATCH v2 3/8] checkout: validate stage and merge option compatibility in checkout_paths() Junio C Hamano
2026-09-01 11:53 ` Karthik Nayak
2026-09-01 17:47 ` Junio C Hamano
2026-09-02 11:20 ` Karthik Nayak
2026-09-02 22:40 ` Junio C Hamano
2026-09-03 9:21 ` Karthik Nayak
2026-08-30 20:48 ` [PATCH v2 4/8] checkout: extract option validation and pathspec helpers Junio C Hamano
2026-08-30 20:48 ` [PATCH v2 5/8] checkout: extract branch setup and tracking helpers Junio C Hamano
2026-08-30 20:48 ` [PATCH v2 6/8] checkout: restructure switch, restore, and checkout entrypoints Junio C Hamano
2026-09-01 14:14 ` Karthik Nayak
2026-09-01 23:25 ` Junio C Hamano
2026-09-02 11:02 ` Karthik Nayak
2026-08-30 20:48 ` [PATCH v2 7/8] checkout: wrap overly long lines Junio C Hamano
2026-08-30 20:48 ` [PATCH v2 8/8] checkout: move post_checkout_hook() to checkout.c Junio C Hamano
2026-08-29 13:24 ` [PATCH] builtin: replace the_repository parameter in is_bare_repository() D. Ben Knoble
2026-08-27 21:35 ` [PATCH] do not pass "repo" to builtin commmand implementations Junio C Hamano
2026-08-28 9:05 ` Hardik Kumar
2026-08-28 20:59 ` Junio C Hamano
2026-08-28 4:01 ` [PATCH] builtin: replace the_repository parameter in is_bare_repository() Hardik Kumar
2026-08-27 19:56 ` Hardik Kumar
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqse3x1y20.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
/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.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox