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

[PATCH 02/18] builtin: Support RUN_SETUP_GENTLY to set up repository early if found

From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Date
Mar 7, 2010, 04:55 UTC
Message-ID
<1267937767-12504-3-git-send-email-pclouds@gmail.com>
In-Reply-To
<1267937767-12504-1-git-send-email-pclouds@gmail.com>

Attempts to access gitdir are everywhere, even before cmd_*() is called. Because repository has not been found, repository-specific information (i.e. $GIT_DIR/config) may not be read. This leads to obscure bugs.

So the sooner we setup gitdir, the less trouble we may have to deal with.
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 cache.h |    1 +
 git.c   |   11 ++++++++---
 setup.c |    4 +++-
 3 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/cache.h b/cache.h
index 30fddf1..68412c0 100644
--- a/cache.h
+++ b/cache.h
@@ -1057,6 +1057,7 @@ int split_cmdline(char *cmdline, const char ***argv);
 /* git.c */
 struct startup_info {
 	const char *prefix;
+	int have_repository;
 };
 extern struct startup_info *startup_info;
 
diff --git a/git.c b/git.c
index 4be34e4..9e0e2d0 100644
--- a/git.c
+++ b/git.c
@@ -220,13 +220,14 @@ static int handle_alias(int *argcp, const char ***argv)
 
 const char git_version_string[] = GIT_VERSION;
 
-#define RUN_SETUP	(1<<0)
-#define USE_PAGER	(1<<1)
+#define RUN_SETUP		(1<<0)
+#define USE_PAGER		(1<<1)
 /*
  * require working tree to be present -- anything uses this needs
  * RUN_SETUP for reading from the configuration file.
  */
-#define NEED_WORK_TREE	(1<<2)
+#define NEED_WORK_TREE		(1<<2)
+#define RUN_SETUP_GENTLY	(1<<3)
 
 struct cmd_struct {
 	const char *cmd;
@@ -245,6 +246,10 @@ static int run_builtin(struct cmd_struct *p, int argc, const char **argv)
 	if (!help) {
 		if (p->option & RUN_SETUP)
 			setup_git_directory();
+		if (p->option & RUN_SETUP_GENTLY) {
+			int nongit_ok;
+			setup_git_directory_gently(&nongit_ok);
+		}
 
 		if (use_pager == -1 && p->option & RUN_SETUP)
 			use_pager = check_pager_config(p->cmd);
diff --git a/setup.c b/setup.c
index cf1b37d..bb3648c 100644
--- a/setup.c
+++ b/setup.c
@@ -448,8 +448,10 @@ const char *setup_git_directory_gently(int *nongit_ok)
 	const char *prefix;
 
 	prefix = setup_git_directory_gently_1(nongit_ok);
-	if (startup_info)
+	if (startup_info) {
 		startup_info->prefix = prefix;
+		startup_info->have_repository = !nongit_ok || !*nongit_ok;
+	}
 	return prefix;
 }
 
-- 
1.7.0.195.g637a2
Previous: Nguyễn Thái Ngọc DuyNext: Nguyễn Thái Ngọc Duy
Message 3 of 19 in “Search and set up repository early for builtin commands”
  1. 00/18 Search and set up repository early for builtin commandsNguyễn Thái Ngọc Duy, Mar 7, 2010
  2. 01/18 builtin: introduce startup_info structNguyễn Thái Ngọc Duy, Mar 7, 2010
  3. 02/18 builtin: Support RUN_SETUP_GENTLY to set up repository early if foundNguyễn Thái Ngọc Duy, Mar 7, 2010
  4. 03/18 config: use RUN_SETUP_GENTLYNguyễn Thái Ngọc Duy, Mar 7, 2010
  5. 04/18 hash-object: use RUN_SETUP_GENTLYNguyễn Thái Ngọc Duy, Mar 7, 2010
  6. 05/18 shortlog: use RUN_SETUP_GENTLYNguyễn Thái Ngọc Duy, Mar 7, 2010
  7. 06/18 grep: use RUN_SETUP_GENTLYNguyễn Thái Ngọc Duy, Mar 7, 2010
  8. 07/18 builtin: USE_PAGER should not be used without RUN_SETUP*Nguyễn Thái Ngọc Duy, Mar 7, 2010
  9. 08/18 archive: use RUN_SETUP_GENTLYNguyễn Thái Ngọc Duy, Mar 7, 2010
  10. 09/18 mailinfo: use RUN_SETUP_GENTLYNguyễn Thái Ngọc Duy, Mar 7, 2010
  11. 10/18 check-ref-format: use RUN_SETUP_GENTLYNguyễn Thái Ngọc Duy, Mar 7, 2010
  12. 11/18 verify-pack: use RUN_SETUP_GENTLYNguyễn Thái Ngọc Duy, Mar 7, 2010
  13. 12/18 apply: use RUN_SETUP_GENTLYNguyễn Thái Ngọc Duy, Mar 7, 2010
  14. 13/18 bundle: use RUN_SETUP_GENTLYNguyễn Thái Ngọc Duy, Mar 7, 2010
  15. 14/18 diff: use RUN_SETUP_GENTLYNguyễn Thái Ngọc Duy, Mar 7, 2010
  16. 15/18 help: use RUN_SETUP_GENTLYNguyễn Thái Ngọc Duy, Mar 7, 2010
  17. 16/18 ls-remote: use RUN_SETUP_GENTLYNguyễn Thái Ngọc Duy, Mar 7, 2010
  18. 17/18 var: use RUN_SETUP_GENTLYNguyễn Thái Ngọc Duy, Mar 7, 2010
  19. 18/18 merge-file: use RUN_SETUP_GENTLYNguyễn Thái Ngọc Duy, Mar 7, 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.