Skip to content

Commit 9ed143e

Browse files
dschogitster
authored andcommitted
var(win32): do report the GIT_SHELL_PATH that is actually used
On Windows, Unix-like paths like `/bin/sh` make very little sense. In the best case, they simply don't work, in the worst case they are misinterpreted as absolute paths that are relative to the drive associated with the current directory. To that end, Git does not actually use the path `/bin/sh` that is recorded e.g. when `run_command()` is called with a Unix shell command-line. Instead, as of 7762975 (Do not use SHELL_PATH from build system in prepare_shell_cmd on Windows, 2012-04-17), it re-interprets `/bin/sh` as "look up `sh` on the `PATH` and use the result instead". This is the logic users expect to be followed when running `git var GIT_SHELL_PATH`. However, when 1e65721 (var: add support for listing the shell, 2023-06-27) introduced support for `git var GIT_SHELL_PATH`, Windows was not special-cased as above, which is why it outputs `/bin/sh` even though that disagrees with what Git actually uses. Let's fix this by using the exact same logic as `prepare_shell_cmd()`, adjusting the Windows-specific `git var GIT_SHELL_PATH` test case to verify that it actually finds a working executable. Reported-by: Phillip Wood <[email protected]> Signed-off-by: Johannes Schindelin <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 877da5e commit 9ed143e

File tree

2 files changed

+3
-2
lines changed

2 files changed

+3
-2
lines changed

builtin/var.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "refs.h"
1313
#include "path.h"
1414
#include "strbuf.h"
15+
#include "run-command.h"
1516

1617
static const char var_usage[] = "git var (-l | <variable>)";
1718

@@ -51,7 +52,7 @@ static char *default_branch(int ident_flag UNUSED)
5152

5253
static char *shell_path(int ident_flag UNUSED)
5354
{
54-
return xstrdup(SHELL_PATH);
55+
return git_shell_path();
5556
}
5657

5758
static char *git_attr_val_system(int ident_flag UNUSED)

t/t0007-git-var.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ test_expect_success POSIXPERM 'GIT_SHELL_PATH points to a valid executable' '
157157
test_expect_success MINGW 'GIT_SHELL_PATH points to a suitable shell' '
158158
shellpath=$(git var GIT_SHELL_PATH) &&
159159
case "$shellpath" in
160-
*sh) ;;
160+
[A-Z]:/*/sh.exe) test -f "$shellpath";;
161161
*) return 1;;
162162
esac
163163
'

0 commit comments

Comments
 (0)