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

[PATCH v2 05/19] Add git_config_early()

From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Date
Mar 21, 2010, 10:30 UTC
Message-ID
<1269167446-7799-6-git-send-email-pclouds@gmail.com>
In-Reply-To
<1269167446-7799-1-git-send-email-pclouds@gmail.com>

This version of git_config() will be used during repository setup. As a repository is being set up, $GIT_DIR is not nailed down yet, git_pathdup() should not be used to get $GIT_DIR/config.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 cache.h  |    1 +
 config.c |   19 ++++++++++++++-----
 2 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/cache.h b/cache.h
index 68412c0..3bd219c 100644
--- a/cache.h
+++ b/cache.h
@@ -933,6 +933,7 @@ typedef int (*config_fn_t)(const char *, const char *, void *);
 extern int git_default_config(const char *, const char *, void *);
 extern int git_config_from_file(config_fn_t fn, const char *, void *);
 extern int git_config(config_fn_t fn, void *);
+extern int git_config_early(config_fn_t fn, void *, const char *repo_config);
 extern int git_parse_ulong(const char *, unsigned long *);
 extern int git_config_int(const char *, const char *);
 extern unsigned long git_config_ulong(const char *, const char *);
diff --git a/config.c b/config.c
index 6963fbe..2d38096 100644
--- a/config.c
+++ b/config.c
@@ -699,10 +699,9 @@ int git_config_global(void)
 	return !git_env_bool("GIT_CONFIG_NOGLOBAL", 0);
 }
 
-int git_config(config_fn_t fn, void *data)
+int git_config_early(config_fn_t fn, void *data, const char *repo_config)
 {
 	int ret = 0, found = 0;
-	char *repo_config = NULL;
 	const char *home = NULL;
 
 	/* Setting $GIT_CONFIG makes git read _only_ the given config file. */
@@ -724,17 +723,27 @@ int git_config(config_fn_t fn, void *data)
 		free(user_config);
 	}
 
-	repo_config = git_pathdup("config");
-	if (!access(repo_config, R_OK)) {
+	if (repo_config && !access(repo_config, R_OK)) {
 		ret += git_config_from_file(fn, repo_config, data);
 		found += 1;
 	}
-	free(repo_config);
 	if (found == 0)
 		return -1;
 	return ret;
 }
 
+int git_config(config_fn_t fn, void *data)
+{
+	char *repo_config = NULL;
+	int ret;
+
+	repo_config = git_pathdup("config");
+	ret = git_config_early(fn, data, repo_config);
+	if (repo_config)
+		free(repo_config);
+	return ret;
+}
+
 /*
  * Find all the stuff for git_config_set() below.
  */
-- 
1.7.0.2.425.gb99f1
Previous: Nguyễn Thái Ngọc DuyNext: Nguyễn Thái Ngọc Duy
Message 6 of 20 in “nd/setup part two, second round”
  1. 00/19 nd/setup part two, second roundNguyễn Thái Ngọc Duy, Mar 21, 2010
  2. 01/19 Move enter_repo() to setup.cNguyễn Thái Ngọc Duy, Mar 21, 2010
  3. 02/19 enter_repo(): initialize other variables as setup_git_directory_gently() doesNguyễn Thái Ngọc Duy, Mar 21, 2010
  4. 03/19 rev-parse --git-dir: print relative gitdir correctlyNguyễn Thái Ngọc Duy, Mar 21, 2010
  5. 04/19 worktree setup: call set_git_dir explicitlyNguyễn Thái Ngọc Duy, Mar 21, 2010
  6. 05/19 Add git_config_early()Nguyễn Thái Ngọc Duy, Mar 21, 2010
  7. 06/19 Use git_config_early() instead of git_config() during repo setupNguyễn Thái Ngọc Duy, Mar 21, 2010
  8. 07/19 worktree setup: restore original state when things go wrongNguyễn Thái Ngọc Duy, Mar 21, 2010
  9. 08/19 init/clone: turn on startup->have_repository properlyNguyễn Thái Ngọc Duy, Mar 21, 2010
  10. 09/19 git_config(): do not read .git/config if there is no repositoryNguyễn Thái Ngọc Duy, Mar 21, 2010
  11. 10/19 Do not read .git/info/exclude if there is no repositoryNguyễn Thái Ngọc Duy, Mar 21, 2010
  12. 11/19 Do not read .git/info/attributes if there is no repositoryNguyễn Thái Ngọc Duy, Mar 21, 2010
  13. 12/19 apply: do not check sha1 when repository has not been foundNguyễn Thái Ngọc Duy, Mar 21, 2010
  14. 13/19 config: do not read .git/config if there is no repositoryNguyễn Thái Ngọc Duy, Mar 21, 2010
  15. 14/19 run_builtin(): save "-h" detection result for later useNguyễn Thái Ngọc Duy, Mar 21, 2010
  16. 15/19 builtins: utilize startup_info->help where possibleNguyễn Thái Ngọc Duy, Mar 21, 2010
  17. 16/19 builtins: check for startup_info->help, print and exit earlyNguyễn Thái Ngọc Duy, Mar 21, 2010
  18. 17/19 Allow to undo setup_git_directory_gently() gracefully (and fix alias code)Nguyễn Thái Ngọc Duy, Mar 21, 2010
  19. 18/19 alias: keep repository found while collecting aliases as long as possibleNguyễn Thái Ngọc Duy, Mar 21, 2010
  20. 19/19 Guard unallowed access to repository when it's not set upNguyễn Thái Ngọc Duy, Mar 21, 2010

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.