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
Junio C Hamano <gitster@pobox.com>
Date
Jul 9, 2024, 16:31 UTC
Message-ID
<xmqqy16afrwr.fsf@gitster.g>
In-Reply-To
<ZoyDlrcmyXUX_dki@tapette.crustytoothpaste.net>
"brian m. carlson" <sandals@crustytoothpaste.net> writes:
> Why not add Perl or Wish or something else?  Because once you have the
> Git for Windows sh, you can use a fixed Unix path to look them up and
> get a canonical Windows path with cygpath -w.  Thus, this is just the
> minimal bootstrapping functionality to get that information.

Besides, perl and wish are not part of Git. The same thing can be said that shell is not part of Git.

So stepping back and thinking why we have "git var GIT_SHELL_PATH", what should it mean to begin with? It is obviously not to tell where we installed the thing as a part of "Git" suite, even though Git for Windows installer may let users install the shell and other stuff (similar to how "apt" lets users install package on Debian derived systems).

Hence, I can accept that "git var GIT_SHELL_PATH" is not (and does not have to be) about where we installed what we shipped. It is where we use the shell from (i.e., when we need "sh", we use that shell).

   The documentation for GIT_SHELL_PATH is already good.  Sorry for
   my earlier confusion---I should have looked at it first.  It says
   it is not about what we ship, but what we use when we need to
   shell out.

I am OK with GIT_SHELL_PATH computed differently depending on the platform, as different platform apparently use different mechanism to decide which shell to spawn. On POSIX systems, it is the one we compiled to use, while on Windows it is the one that happens to be on the end-user's PATH.

But then the comment I made in my earlier review still stands that such a platform dependent logic should be implemented a bit more cleanly than the posted patch.

"Which shell do we use at runtime" should influence a lot of what the things in run-command.c do, so perhaps

 - we remove builtin/var.c:shell_path()
 - We create run-command.c:git_shell_path() immediately above
   run-command.c:prepare_shell_cmd().  We will add conditional
   compilation there (i.e. #ifdef GIT_WINDOWS_NATIVE).  The default
   implementation is to return SHELL_PATH, and on Windows it looks
   for "sh" on %PATH%.
 - The entry for GIT_SHELL_PATH in builtin/var.c:git_vars[] should
   be updated to point at git_shell_path() in run-command.c
 - Near the beginning of run-command.c:prepare_shell_cmd(), there is
   a conditional compilation.  If we can remove it by using
   git_shell_path(), that would be a nice bonus.
would give us a good approach for implementation?
Thanks.
Previous: brian m. carlsonNext: Phillip Wood
Message 6 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.