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

Re: [PATCH 1/2] subtree: fix the GIT_EXEC_PATH sanity check to work on Windows

From
Luke Shumaker <lukeshu@lukeshu.com>
Date
Jun 11, 2021, 00:40 UTC
Message-ID
<87bl8d6xoq.wl-lukeshu@lukeshu.com>
In-Reply-To
<a91ac6c18938116c4a74e19466da456b67376fa5.1623316412.git.gitgitgadget@gmail.com>

On Thu, 10 Jun 2021 03:13:30 -0600, Johannes Schindelin via GitGitGadget wrote:

Show 40 quoted lines
> 
> From: Johannes Schindelin <johannes.schindelin@gmx.de>
> 
> In 22d550749361 (subtree: don't fuss with PATH, 2021-04-27), `git
> subtree` was broken thoroughly on Windows.
> 
> The reason is that it assumes Unix semantics, where `PATH` is
> colon-separated, and it assumes that `$GIT_EXEC_PATH:` is a verbatim
> prefix of `$PATH`. Neither are true, the latter in particular because
> `GIT_EXEC_PATH` is a Windows-style path, while `PATH` is a Unix-style
> path list.
> 
> Let's keep the original spirit, and hack together something that
> unbreaks the logic on Windows.
> 
> A more thorough fix would look at the inode of `$GIT_EXEC_PATH` and of
> the first component of `$PATH`, to make sure that they are identical,
> but that is even trickier to do in a portable way.
> 
> This fixes https://github.com/git-for-windows/git/issues/3260
> 
> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> ---
>  contrib/subtree/git-subtree.sh | 8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/contrib/subtree/git-subtree.sh b/contrib/subtree/git-subtree.sh
> index b06782bc7955..6bd689a6bb92 100755
> --- a/contrib/subtree/git-subtree.sh
> +++ b/contrib/subtree/git-subtree.sh
> @@ -5,7 +5,13 @@
>  # Copyright (C) 2009 Avery Pennarun <apenwarr@gmail.com>
>  #
>  
> -if test -z "$GIT_EXEC_PATH" || test "${PATH#"${GIT_EXEC_PATH}:"}" = "$PATH" || ! test -f "$GIT_EXEC_PATH/git-sh-setup"
> +if test -z "$GIT_EXEC_PATH" || {
> +	test "${PATH#"${GIT_EXEC_PATH}:"}" = "$PATH" && {
> +		# On Windows, PATH might be Unix-style, GIT_EXEC_PATH not
> +		! type -p cygpath >/dev/null 2>&1 ||
> +		test "${PATH#$(cygpath -au "$GIT_EXEC_PATH"):}" = "$PATH"
Nit: That should have a couple more `"` in it:
    test "${PATH#"$(cygpath -au "$GIT_EXEC_PATH"):"}" = "$PATH"
But no need to re-roll for just that.

Do we also need to handle the reverse case, where PATH uses backslashes but GIT_EXEC_PATH uses forward slashes?

-- 
Happy hacking,
~ Luke Shumaker
Previous: Johannes Schindelin via GitGitGadgetNext: Junio C Hamano
Message 3 of 27 in “Fix git subtree on Windows”
  1. 0/2 Fix git subtree on WindowsJohannes Schindelin via GitGitGadget, Jun 10, 2021
  2. 1/2 subtree: fix the GIT_EXEC_PATH sanity check to work on WindowsJohannes Schindelin via GitGitGadget, Jun 10, 2021
  3. Luke ShumakerJun 11, 2021
  4. Junio C HamanoJun 11, 2021
  5. Luke ShumakerJun 11, 2021
  6. Johannes SchindelinJun 11, 2021
  7. Luke ShumakerJun 11, 2021
  8. Johannes SchindelinJun 14, 2021
  9. Junio C HamanoJun 15, 2021
  10. Jeff KingJun 15, 2021
  11. Bagas SanjayaJun 15, 2021
  12. Jeff KingJun 15, 2021
  13. Johannes SchindelinJun 15, 2021
  14. Junio C HamanoJun 16, 2021
  15. Jeff KingJun 16, 2021
  16. 2/2 subtree: fix assumption about the directory separatorJohannes Schindelin via GitGitGadget, Jun 10, 2021
  17. Luke ShumakerJun 11, 2021
  18. Johannes SchindelinJun 11, 2021
  19. Luke ShumakerJun 11, 2021
  20. Johannes SchindelinJun 11, 2021
  21. Luke ShumakerJun 11, 2021
  22. Felipe ContrerasJun 11, 2021
  23. Luke ShumakerJun 12, 2021
  24. 0/2 Fix git subtree on WindowsJohannes Schindelin via GitGitGadget, Jun 14, 2021
  25. 2/2 subtree: fix assumption about the directory separatorJohannes Schindelin via GitGitGadget, Jun 14, 2021
  26. 1/2 subtree: fix the GIT_EXEC_PATH sanity check to work on WindowsJohannes Schindelin via GitGitGadget, Jun 14, 2021
  27. Junio C HamanoJun 15, 2021

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.