aboutsummaryrefslogtreecommitdiff
path: root/refs.c
diff options
context:
space:
mode:
authorKarthik Nayak <karthik.188@gmail.com>2026-02-25 10:40:42 +0100
committerJunio C Hamano <gitster@pobox.com>2026-02-25 09:27:12 -0800
commit4ffbb02ee4bde38b4792b93cfba48755b394a130 (patch)
tree722ababfdbaacf3e806cf8c142a11827f94e8a67 /refs.c
parent2c69ff481938a10660c2078cf83235db26773254 (diff)
downloadgit-4ffbb02ee4bde38b4792b93cfba48755b394a130.tar.xz
refs: extract out `refs_create_refdir_stubs()`
For Git to recognize a directory as a Git directory, it requires the directory to contain: 1. 'HEAD' file 2. 'objects/' directory 3. 'refs/' directory Here, #1 and #3 are part of the reference storage mechanism, specifically the files backend. Since then, newer backends such as the reftable backend have moved to using their own path ('reftable/') for storing references. But to ensure Git still recognizes the directory as a Git directory, we create stubs. There are two locations where we create stubs: - In 'refs/reftable-backend.c' when creating the reftable backend. - In 'clone.c' before spawning transport helpers. In a following commit, we'll add another instance. So instead of repeating the code, let's extract out this code to `refs_create_refdir_stubs()` and use it. Signed-off-by: Karthik Nayak <karthik.188@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'refs.c')
-rw-r--r--refs.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/refs.c b/refs.c
index 627b7f8698..77b93d655b 100644
--- a/refs.c
+++ b/refs.c
@@ -2163,6 +2163,29 @@ const char *refs_resolve_ref_unsafe(struct ref_store *refs,
return NULL;
}
+void refs_create_refdir_stubs(struct repository *repo, const char *refdir,
+ const char *refs_heads_content)
+{
+ struct strbuf path = STRBUF_INIT;
+
+ strbuf_addf(&path, "%s/HEAD", refdir);
+ write_file(path.buf, "ref: refs/heads/.invalid");
+ adjust_shared_perm(repo, path.buf);
+
+ strbuf_reset(&path);
+ strbuf_addf(&path, "%s/refs", refdir);
+ safe_create_dir(repo, path.buf, 1);
+
+ if (refs_heads_content) {
+ strbuf_reset(&path);
+ strbuf_addf(&path, "%s/refs/heads", refdir);
+ write_file(path.buf, "%s", refs_heads_content);
+ adjust_shared_perm(repo, path.buf);
+ }
+
+ strbuf_release(&path);
+}
+
/* backend functions */
int ref_store_create_on_disk(struct ref_store *refs, int flags, struct strbuf *err)
{