Skip to content

Commit

Permalink
var(win32): do report the GIT_SHELL_PATH that is actually used
Browse files Browse the repository at this point in the history
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]>
  • Loading branch information
dscho committed Jul 12, 2024
1 parent c9434de commit 2347ede
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 2 deletions.
3 changes: 2 additions & 1 deletion builtin/var.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include "refs.h"
#include "path.h"
#include "strbuf.h"
#include "run-command.h"

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

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

static char *shell_path(int ident_flag UNUSED)
{
return xstrdup(SHELL_PATH);
return git_shell_path();
}

static char *git_attr_val_system(int ident_flag UNUSED)
Expand Down
2 changes: 1 addition & 1 deletion t/t0007-git-var.sh
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ test_expect_success POSIXPERM 'GIT_SHELL_PATH points to a valid executable' '
test_expect_success MINGW 'GIT_SHELL_PATH points to a suitable shell' '
shellpath=$(git var GIT_SHELL_PATH) &&
case "$shellpath" in
*sh) ;;
[A-Z]:/*/sh.exe) test -f "$shellpath";;
*) return 1;;
esac
'
Expand Down

0 comments on commit 2347ede

Please sign in to comment.