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

[PATCH 2/2 v2] run-command (Windows): Run dashless "git <cmd>" (solves part of problem with system_path)

From
Steffen Prohaska <prohaska@zib.de>
Date
Jul 29, 2008, 05:17 UTC
Message-ID
<1217308647-23673-1-git-send-email-prohaska@zib.de>
In-Reply-To
<BF5B7CBE-ACA8-4D81-8FC0-8A7901205854@zib.de>

We prefer running the dashless form, so we should use it in MinGW's start_command(), too.

This solves a fundamental problem we have with the computation of system directories based on relative paths in combination with the new gitexecpath 'libexec/git-core'. The problem is that the program 'git' is hardlinked to directories with different depth. It is either used as 'bin/git' (1 directory) or as 'libexec/git-core/git-*' (2 directories). Thus, using the same relative path in system_path() yields different results when starting from the two locations. I recognized the problem because /etc/gitconfig is no longer read.

This commit fixes the problem by always calling 'bin/git' for builtin commands. The computation in system_path() thus always starts from 'bin' and yields predictable results. This is however only part of a full solution to the problem outlined above. Remaining problems are:

 - Other code paths might run the dashed forms directly.
 - We have non-builtins that are implemented in C, e.g. fast-import.c.
   These non-builtins will still compute wrong paths.
Signed-off-by: Steffen Prohaska <prohaska@zib.de>
Acked-by: Johannes Sixt <johannes.sixt@telecom.at>
---
 run-command.c |   11 ++++-------
 1 files changed, 4 insertions(+), 7 deletions(-)
diff --git a/run-command.c b/run-command.c
index 6e29fdf..a3b28a6 100644
--- a/run-command.c
+++ b/run-command.c
@@ -119,9 +119,8 @@ int start_command(struct child_process *cmd)
 	}
 #else
 	int s0 = -1, s1 = -1, s2 = -1;	/* backups of stdin, stdout, stderr */
-	const char *sargv0 = cmd->argv[0];
+	const char **sargv = cmd->argv;
 	char **env = environ;
-	struct strbuf git_cmd;
 
 	if (cmd->no_stdin) {
 		s0 = dup(0);
@@ -165,9 +164,7 @@ int start_command(struct child_process *cmd)
 	}
 
 	if (cmd->git_cmd) {
-		strbuf_init(&git_cmd, 0);
-		strbuf_addf(&git_cmd, "git-%s", cmd->argv[0]);
-		cmd->argv[0] = git_cmd.buf;
+		cmd->argv = prepare_git_cmd(cmd->argv);
 	}
 
 	cmd->pid = mingw_spawnvpe(cmd->argv[0], cmd->argv, env);
@@ -175,9 +172,9 @@ int start_command(struct child_process *cmd)
 	if (cmd->env)
 		free_environ(env);
 	if (cmd->git_cmd)
-		strbuf_release(&git_cmd);
+		free(cmd->argv);
 
-	cmd->argv[0] = sargv0;
+	cmd->argv = sargv;
 	if (s0 >= 0)
 		dup2(s0, 0), close(s0);
 	if (s1 >= 0)
-- 
1.6.0.rc0.79.gb0320
Next: Steffen Prohaska
Message 1 of 9 in “run-command (Windows): Run dashless "git <cmd>" (solves part of problem with system_path)”
  1. 2/2 run-command (Windows): Run dashless "git <cmd>" (solves part of problem with system_path)Steffen Prohaska, Jul 29, 2008
  2. [FOR DEBUGGING] Stop installing BUILT_INSSteffen Prohaska, Jul 29, 2008
  3. Shawn O. PearceJul 29, 2008
  4. Junio C HamanoJul 29, 2008
  5. Steffen ProhaskaJul 29, 2008
  6. Johannes SchindelinJul 29, 2008
  7. Steffen ProhaskaJul 29, 2008
  8. Steffen ProhaskaJul 29, 2008
  9. Johannes SchindelinJul 29, 2008

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.