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

Re: [PATCH] var(win32): do report the GIT_SHELL_PATH that is actually used

From
brian m. carlson <sandals@crustytoothpaste.net>
Date
Jul 8, 2024, 23:40 UTC
Message-ID
<Zox48sVp-PybvLxi@tapette.crustytoothpaste.net>
In-Reply-To
<xmqqed83g1e6.fsf@gitster.g>
On 2024-07-08 at 18:54:41, Junio C Hamano wrote:
Show 16 quoted lines
> This asks for a few naïve questions.
> 
> If there is a fixed path the "git" binary was compiled for, which
> can be referenced with a single variable GIT_SHELL_PATH, even though
> on non-POSIX systems it won't be like /bin/sh, wouldn't there be a
> path like "C:\Program Files\Git for Windows\bin\sh" (I do not do
> Windows, so you may be installing somewhere completely different)
> and wouldn't such a path work regardless of which drive is
> associated with the current directory?
> 
> I would actually understand that, with relocatable build where
> everything is relative to the installed directory, a single
> GIT_SHELL_PATH that is defined at the compile-time may not make much
> sense, and when you need to interpret a shell script, you may need
> to recompute the actual path, relative to the installation
> directory.

I'll jump in here, and Dscho can correct me if I'm wrong, but I believe there's one build that's always relocatable (well, there's MinGit and the regular, but ignoring that). You can install to almost any drive and location, so it's not known at compile time.

Show 15 quoted lines
> But I wonder why the replacement shell that is spawned is searched
> for in PATH, not where you installed it (which of course would be
> different from /bin/sh).  In other words, when running script that
> calls for "#!/bin/sh", looking for "sh" on PATH might be a workable
> hack, and it might even yield the same result, especially if you
> prepend the path you installed git and bash as part of your
> installation package to the user's PATH, but wouldn't it make more
> sense to compute it just like how "git --exec-path" is recomputed
> with the relocatable build?
> 
> The "look on the %PATH%" strategy does not make any sense as an
> implementation for getting GIT_SHELL_PATH, which answers "what is
> the shell this instanciation of Git was built to work with?", at
> least to me.  Maybe I am missing some knowledge on limitations on
> Windows and Git for Windows why it is done that way.

Well, it may be that that's the approach that Git for Windows takes to look up the shell. (I don't know for certain.) If that _is_ what it does, then that's absolutely the value we want because we want to use whatever shell Git for Windows uses. I will say it's a risky approach because it could well also find a Cygwin or MINGW shell (or, if it were called bash, WSL), but we really want whatever Git for Windows does here.

That's because external users who rely on Git for Windows to furnish a POSIX shell will want to know the path, and this variable is the best way to do that (and the reason I added it).

-- 
brian m. carlson (they/them or he/him)
Toronto, Ontario, CA
Previous: Junio C HamanoNext: Junio C Hamano
Message 3 of 35 in “var(win32): do report the GIT_SHELL_PATH that is actually used”
  1. var(win32): do report the GIT_SHELL_PATH that is actually usedJohannes Schindelin via GitGitGadget, Jul 8, 2024
  2. Junio C HamanoJul 8, 2024
  3. brian m. carlsonJul 8, 2024
  4. Junio C HamanoJul 8, 2024
  5. brian m. carlsonJul 9, 2024
  6. Junio C HamanoJul 9, 2024
  7. Phillip WoodJul 9, 2024
  8. Junio C HamanoJul 8, 2024
  9. Phillip WoodJul 9, 2024
  10. Johannes SchindelinJul 11, 2024
  11. phillip.wood123@gmail.comJul 17, 2024
  12. 0/7 var(win32): do report the GIT_SHELL_PATH that is actually usedJohannes Schindelin via GitGitGadget, Jul 11, 2024
  13. 1/7 run-command: refactor getting the Unix shell path into its own functionJohannes Schindelin via GitGitGadget, Jul 11, 2024
  14. 2/7 strvec: declare the `strvec_push_nodup()` function globallyJohannes Schindelin via GitGitGadget, Jul 11, 2024
  15. 3/7 win32: override `fspathcmp()` with a directory separator-aware versionJohannes Schindelin via GitGitGadget, Jul 11, 2024
  16. Phillip WoodJul 12, 2024
  17. 4/7 mingw(is_msys2_sh): handle forward slashes in the `sh.exe` path, tooJohannes Schindelin via GitGitGadget, Jul 11, 2024
  18. Phillip WoodJul 12, 2024
  19. 5/7 run-command(win32): resolve the path to the Unix shell earlyJohannes Schindelin via GitGitGadget, Jul 11, 2024
  20. 6/7 run-command: declare the `git_shell_path()` function globallyJohannes Schindelin via GitGitGadget, Jul 11, 2024
  21. 7/7 var(win32): do report the GIT_SHELL_PATH that is actually usedJohannes Schindelin via GitGitGadget, Jul 11, 2024
  22. Junio C HamanoJul 12, 2024
  23. Phillip WoodJul 12, 2024
  24. Junio C HamanoJul 12, 2024
  25. 0/7 var(win32): do report the GIT_SHELL_PATH that is actually usedJohannes Schindelin via GitGitGadget, Jul 13, 2024
  26. 1/7 run-command: refactor getting the Unix shell path into its own functionJohannes Schindelin via GitGitGadget, Jul 13, 2024
  27. 2/7 strvec: declare the `strvec_push_nodup()` function globallyJohannes Schindelin via GitGitGadget, Jul 13, 2024
  28. 3/7 win32: override `fspathcmp()` with a directory separator-aware versionJohannes Schindelin via GitGitGadget, Jul 13, 2024
  29. 4/7 mingw(is_msys2_sh): handle forward slashes in the `sh.exe` path, tooJohannes Schindelin via GitGitGadget, Jul 13, 2024
  30. 5/7 run-command(win32): resolve the path to the Unix shell earlyJohannes Schindelin via GitGitGadget, Jul 13, 2024
  31. 6/7 run-command: declare the `git_shell_path()` function globallyJohannes Schindelin via GitGitGadget, Jul 13, 2024
  32. 7/7 var(win32): do report the GIT_SHELL_PATH that is actually usedJohannes Schindelin via GitGitGadget, Jul 13, 2024
  33. Phillip WoodJul 17, 2024
  34. brian m. carlsonJul 17, 2024
  35. Junio C HamanoJul 17, 2024

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.