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

[PATCH] builtin-blame: set up the work_tree before the first file access

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Nov 9, 2007, 11:34 UTC
Message-ID
<Pine.LNX.4.64.0711091132290.4362@racer.site>
In-Reply-To
<20071104070307.GA26071@laptop>

We check in cmd_blame() if the specified path is there, but we failed to set up the working tree before that.

While at it, make setup_work_tree() just return if it was run before.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
	IMO both this patch and the recent patch to call setup_work_tree() 
	are needed.  Only the second call to setup_work_tree() will know 
	if there was no revision specified, and the first one will know if 
	a -- has been seen.
 builtin-blame.c |    1 +
 setup.c         |   10 ++++++++--
 2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/builtin-blame.c b/builtin-blame.c
index 55a3c0b..ba80bf8 100644
--- a/builtin-blame.c
+++ b/builtin-blame.c
@@ -2295,6 +2295,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
 			else if (i != argc - 1)
 				usage(blame_usage); /* garbage at end */
 
+			setup_work_tree();
 			if (!has_path_in_work_tree(path))
 				die("cannot stat path %s: %s",
 				    path, strerror(errno));
diff --git a/setup.c b/setup.c
index 084d722..1421a2c 100644
--- a/setup.c
+++ b/setup.c
@@ -207,12 +207,18 @@ static const char *set_work_tree(const char *dir)
 }
 
 void setup_work_tree(void) {
-	const char *work_tree = get_git_work_tree();
-	const char *git_dir = get_git_dir();
+	const char *work_tree, *git_dir;
+	static int initialized = 0;
+
+	if (initialized)
+		return;
+	work_tree = get_git_work_tree();
+	git_dir = get_git_dir();
 	if (!is_absolute_path(git_dir))
 		set_git_dir(make_absolute_path(git_dir));
 	if (!work_tree || chdir(work_tree))
 		die("This operation must be run in a work tree");
+	initialized = 1;
 }
 
 /*
-- 
1.5.3.5.1645.g1f4df
Previous: Johannes SchindelinNext: Johannes Schindelin
Message 10 of 11 in “Add missing inside_work_tree setting in setup_git_directory_gently”
  1. Add missing inside_work_tree setting in setup_git_directory_gentlyNguyễn Thái Ngọc Duy, Nov 3, 2007
  2. Johannes SchindelinNov 3, 2007
  3. Add missing inside_work_tree setting in setup_git_directory_gentlyNguyễn Thái Ngọc Duy, Nov 3, 2007
  4. Johannes SchindelinNov 3, 2007
  5. Junio C HamanoNov 4, 2007
  6. Nguyen Thai Ngoc DuyNov 4, 2007
  7. Junio C HamanoNov 7, 2007
  8. Johannes SchindelinNov 7, 2007
  9. Johannes SchindelinNov 9, 2007
  10. builtin-blame: set up the work_tree before the first file accessJohannes Schindelin, Nov 9, 2007
  11. Johannes SchindelinNov 3, 2007

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.