git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v7 1/6] setup: don't modify repo in `create_reference_database()`

From
Karthik Nayak <karthik.188@gmail.com>
Date
Feb 19, 2026, 09:38 UTC
Message-ID
<20260219-kn-alternate-ref-dir-v7-1-16f27860dbdf@gmail.com>
In-Reply-To
<20260219-kn-alternate-ref-dir-v7-0-16f27860dbdf@gmail.com>

The `create_reference_database()` function is used to create the reference database during initialization of a repository. The function calls `repo_set_ref_storage_format()` to set the repositories reference format. This is an unexpected side-effect of the function. More so because the function is only called in two locations:

  1. During git-init(1) where the value is propagated from the `struct
     repository_format repo_fmt` value.
  2. During git-clone(1) where the value is propagated from the
     `the_repository` value.

The former is valid, however the flow already calls `repo_set_ref_storage_format()`, so this effort is simply duplicated. The latter sets the existing value in `the_repository` back to itself. While this is okay for now, introduction of more fields in `repo_set_ref_storage_format()` would cause issues, especially dynamically allocated strings, where we would free/allocate the same string back into `the_repostiory`.

To avoid all this confusion, clean up the function to no longer take in and set the repo's reference storage format.

Signed-off-by: Karthik Nayak <karthik.188@gmail.com>
---
 builtin/clone.c | 2 +-
 setup.c         | 7 ++-----
 setup.h         | 3 +--
 3 files changed, 4 insertions(+), 8 deletions(-)
diff --git a/builtin/clone.c b/builtin/clone.c
index b40cee5968..cd43bb5aa2 100644
--- a/builtin/clone.c
+++ b/builtin/clone.c
@@ -1442,7 +1442,7 @@ int cmd_clone(int argc,
 	hash_algo = hash_algo_by_ptr(transport_get_hash_algo(transport));
 	initialize_repository_version(hash_algo, the_repository->ref_storage_format, 1);
 	repo_set_hash_algo(the_repository, hash_algo);
-	create_reference_database(the_repository->ref_storage_format, NULL, 1);
+	create_reference_database(NULL, 1);
 
 	/*
 	 * Before fetching from the remote, download and install bundle
diff --git a/setup.c b/setup.c
index b723f8b339..1fc9ae3872 100644
--- a/setup.c
+++ b/setup.c
@@ -2359,14 +2359,12 @@ static int is_reinit(void)
 	return ret;
 }
 
-void create_reference_database(enum ref_storage_format ref_storage_format,
-			       const char *initial_branch, int quiet)
+void create_reference_database(const char *initial_branch, int quiet)
 {
 	struct strbuf err = STRBUF_INIT;
 	char *to_free = NULL;
 	int reinit = is_reinit();
 
-	repo_set_ref_storage_format(the_repository, ref_storage_format);
 	if (ref_store_create_on_disk(get_main_ref_store(the_repository), 0, &err))
 		die("failed to set up refs db: %s", err.buf);
 
@@ -2701,8 +2699,7 @@ int init_db(const char *git_dir, const char *real_git_dir,
 				      &repo_fmt, init_shared_repository);
 
 	if (!(flags & INIT_DB_SKIP_REFDB))
-		create_reference_database(repo_fmt.ref_storage_format,
-					  initial_branch, flags & INIT_DB_QUIET);
+		create_reference_database(initial_branch, flags & INIT_DB_QUIET);
 	create_object_directory();
 
 	if (repo_settings_get_shared_repository(the_repository)) {
diff --git a/setup.h b/setup.h
index d55dcc6608..ddb9f6701c 100644
--- a/setup.h
+++ b/setup.h
@@ -240,8 +240,7 @@ int init_db(const char *git_dir, const char *real_git_dir,
 void initialize_repository_version(int hash_algo,
 				   enum ref_storage_format ref_storage_format,
 				   int reinit);
-void create_reference_database(enum ref_storage_format ref_storage_format,
-			       const char *initial_branch, int quiet);
+void create_reference_database(const char *initial_branch, int quiet);
 
 /*
  * NOTE NOTE NOTE!!
-- 
2.53.GIT
Previous: Karthik NayakNext: Karthik Nayak
Message 2 of 15 in “refs: allow setting the reference directory”
  1. 0/6 refs: allow setting the reference directoryKarthik Nayak, Feb 19, 2026
  2. 1/6 setup: don't modify repo in `create_reference_database()`Karthik Nayak, Feb 19, 2026
  3. 2/6 refs: extract out `refs_create_refdir_stubs()`Karthik Nayak, Feb 19, 2026
  4. 3/6 refs: move out stub modification to generic layerKarthik Nayak, Feb 19, 2026
  5. Toon ClaesFeb 20, 2026
  6. 4/6 refs: receive and use the reference storage payloadKarthik Nayak, Feb 19, 2026
  7. Toon ClaesFeb 20, 2026
  8. Karthik NayakFeb 22, 2026
  9. 5/6 refs: allow reference location in refstorage configKarthik Nayak, Feb 19, 2026
  10. Toon ClaesFeb 20, 2026
  11. Junio C HamanoFeb 20, 2026
  12. Karthik NayakFeb 22, 2026
  13. 6/6 refs: add GIT_REFERENCE_BACKEND to specify reference backendKarthik Nayak, Feb 19, 2026
  14. Patrick SteinhardtFeb 19, 2026
  15. Karthik NayakFeb 20, 2026

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.