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

[PATCH v2 04/10] check_repository_format_gently: stop using git_config_early

From
Jeff King <peff@peff.net>
Date
Mar 11, 2016, 22:36 UTC
Message-ID
<20160311223659.GD449@sigill.intra.peff.net>
In-Reply-To
<20160311223620.GA7963@sigill.intra.peff.net>

There's a chicken-and-egg problem with using the regular git_config during the repository setup process. We get around it here by using a special interface that lets us specify the per-repo config, and avoid calling git_pathdup().

But this interface doesn't actually make sense. It will look in the system and per-user config, too; we definitely would not want to accept a core.repositoryformatversion from there.

The git_config_from_file interface is a better match, as it lets us look at a single file.

Signed-off-by: Jeff King <peff@peff.net>
---
 setup.c | 11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)
diff --git a/setup.c b/setup.c
index a02932b..a6013e6 100644
--- a/setup.c
+++ b/setup.c
@@ -409,15 +409,10 @@ static int check_repository_format_gently(const char *gitdir, int *nongit_ok)
 	repo_config = sb.buf;
 
 	/*
-	 * git_config() can't be used here because it calls git_pathdup()
-	 * to get $GIT_CONFIG/config. That call will make setup_git_env()
-	 * set git_dir to ".git".
-	 *
-	 * We are in gitdir setup, no git dir has been found useable yet.
-	 * Use a gentler version of git_config() to check if this repo
-	 * is a good one.
+	 * Ignore return value; for historical reasons, we must treat a missing
+	 * config file as a noop (git-init relies on this).
 	 */
-	git_config_early(fn, NULL, repo_config);
+	git_config_from_file(fn, repo_config, NULL);
 	if (GIT_REPO_VERSION_READ < repository_format_version) {
 		if (!nongit_ok)
 			die ("Expected git repo version <= %d, found %d",
-- 
2.8.0.rc2.328.g39e2a47
Previous: Jeff KingNext: Jeff King
Message 5 of 12 in “cleaning up check_repository_format_gently”
  1. 0/10 cleaning up check_repository_format_gentlyJeff King, Mar 11, 2016
  2. 01/10 setup: document check_repository_format()Jeff King, Mar 11, 2016
  3. 02/10 wrap shared_repository global in get/set accessorsJeff King, Mar 11, 2016
  4. 03/10 lazily load core.sharedrepositoryJeff King, Mar 11, 2016
  5. 04/10 check_repository_format_gently: stop using git_config_earlyJeff King, Mar 11, 2016
  6. 05/10 config: drop git_config_earlyJeff King, Mar 11, 2016
  7. Junio C HamanoMar 11, 2016
  8. 06/10 setup: refactor repo format reading and verificationJeff King, Mar 11, 2016
  9. 07/10 init: use setup.c's repo version verificationJeff King, Mar 11, 2016
  10. 08/10 setup: unify repository version callbacksJeff King, Mar 11, 2016
  11. 09/10 setup: drop repository_format_version globalJeff King, Mar 11, 2016
  12. 10/10 verify_repository_format: mark messages for translationJeff King, Mar 11, 2016

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.