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

Re: [PATCH 13/19] mingw: outsmart MSYS2's path substitution in t1508

From
Eric Sunshine <sunshine@sunshineco.com>
Date
Jan 25, 2016, 06:22 UTC
Message-ID
<CAPig+cQfbJUtqu2F497Usaz3Ysf-5-vQgtg-0y8qh+FUQ=HeTA@mail.gmail.com>
In-Reply-To
<xmqqa8nubekj.fsf@gitster.mtv.corp.google.com>
On Sun, Jan 24, 2016 at 9:03 PM, Junio C Hamano <gitster@pobox.com> wrote:
Show 25 quoted lines
> Johannes Schindelin <johannes.schindelin@gmx.de> writes:
>> A string of the form "@/abcd" is considered a file path
>> by the msys layer and therefore translated to a Windows path.
>>
>> Here the trick is to double the slashes.
>>
>> The MSYS2 patch translation can be studied by calling
>>
>>       test-path-utils print_path <path>
>
> This feels wrong.
>
> The point of this test is that you can ask to checkout a branch
> whose name is a strangely looking "@/at-test", and a ref whose name
> is "refs/heads/@/at-test" indeed is created.
>
> The current "checkout" may be lazy and not signal an error for a
> branch name with two consecutive slashes, but I wouldn't be
> surprised if we tighten that later, and more importantly, I do not
> think we ever promised users if you asked a branch "a//b" to be
> created, we would create "refs/heads/a/b".
>
> The new test hardcodes and promises such an incompatible behaviour,
> i.e. a request to create "@//b" results in "@/b" created, only to
> users on MINGW, fracturing the expectations of the Git userbase.

What the commit message doesn't explain is that the MSYS2 Bash shell automatically translates command-line arguments which look like absolute POSIX paths into Windows paths on behalf of the program being invoked. For instance, given the command-line:

    myprog /fish

the shell will translate /fish to a Windows pathname, such as C:\fish before invoking myprog.exe. While this is often the desired behavior, sometimes the argument represents something other than a path, and the translation is unwanted. MSYS provides a way to suppress the behavior manually by doubling the slash, so:

    myprog //fish
will invoke myprog.exe with literal argument /fish (notice the single slash).

This commit message is trying to say that MSYS shell undesirably sees @/fish as an absolute path, thus tries translating it to a Windows path, such as @C:\fish. The only way to suppress this unwanted translation is to manually double the slash, hence the patch makes the test use @//fish which, when finally seen by the program, is just @/fish, as was intended in the first place. So, doubling the slash on MINGW is not promising incompatible behavior for MINGW users; it's just working around unwanted path translation of the shell.

Previous: Junio C HamanoNext: Junio C Hamano
Message 29 of 113 in “Let Git's tests pass on Windows”
  1. 00/19 Let Git's tests pass on WindowsJohannes Schindelin, Jan 24, 2016
  2. 01/19 mingw: let's use gettext with MSYS2Johannes Schindelin, Jan 24, 2016
  3. Junio C HamanoJan 25, 2016
  4. Johannes SchindelinJan 25, 2016
  5. Junio C HamanoJan 25, 2016
  6. 02/19 mingw: do not trust MSYS2's MinGW gettext.shJohannes Schindelin, Jan 24, 2016
  7. 03/19 Git.pm: stop assuming that absolute paths start with a slashJohannes Schindelin, Jan 24, 2016
  8. 04/19 mingw: factor out Windows specific environment setupJohannes Schindelin, Jan 24, 2016
  9. 05/19 mingw: prepare the TMPDIR environment variable for shell scriptsJohannes Schindelin, Jan 24, 2016
  10. Eric SunshineJan 25, 2016
  11. Johannes SchindelinJan 26, 2016
  12. 06/19 mingw: try to delete target directory before renamingJohannes Schindelin, Jan 24, 2016
  13. Philip OakleyJan 24, 2016
  14. Johannes SchindelinJan 25, 2016
  15. Junio C HamanoJan 25, 2016
  16. Johannes SchindelinJan 26, 2016
  17. 07/19 mingw: let lstat() fail with errno == ENOTDIR when appropriateJohannes Schindelin, Jan 24, 2016
  18. 08/19 mingw: fix t5601-clone.shJohannes Schindelin, Jan 24, 2016
  19. 09/19 mingw: accomodate t0060-path-utils for MSYS2Johannes Schindelin, Jan 24, 2016
  20. Johannes SixtJan 24, 2016
  21. Johannes SchindelinJan 25, 2016
  22. 10/19 mingw: disable mkfifo-based testsJohannes Schindelin, Jan 24, 2016
  23. 11/19 tests: turn off git-daemon tests if FIFOs are not availableJohannes Schindelin, Jan 24, 2016
  24. 12/19 mingw: do not use symlinks with SVN in t9100Johannes Schindelin, Jan 24, 2016
  25. Junio C HamanoJan 25, 2016
  26. Johannes SchindelinJan 25, 2016
  27. 13/19 mingw: outsmart MSYS2's path substitution in t1508Johannes Schindelin, Jan 24, 2016
  28. Junio C HamanoJan 25, 2016
  29. Eric SunshineJan 25, 2016
  30. Junio C HamanoJan 25, 2016
  31. Johannes SchindelinJan 26, 2016
  32. Johannes SchindelinJan 25, 2016
  33. Johannes SchindelinJan 25, 2016
  34. 14/19 mingw: fix t9700's assumption about directory separatorsJohannes Schindelin, Jan 24, 2016
  35. 15/19 mingw: work around pwd issues in the testsJohannes Schindelin, Jan 24, 2016
  36. 16/19 mingw: avoid absolute path in t0008Johannes Schindelin, Jan 24, 2016
  37. Junio C HamanoJan 25, 2016
  38. Johannes SchindelinJan 25, 2016
  39. Ray DonnellyJan 25, 2016
  40. Junio C HamanoJan 25, 2016
  41. Johannes SchindelinJan 26, 2016
  42. 17/19 mingw: fix git-svn tests that expect chmod to workJohannes Schindelin, Jan 24, 2016
  43. Junio C HamanoJan 25, 2016
  44. Johannes SchindelinJan 26, 2016
  45. Junio C HamanoJan 26, 2016
  46. 18/19 mingw: skip a couple of git-svn tests that cannot pass on WindowsJohannes Schindelin, Jan 24, 2016
  47. Junio C HamanoJan 25, 2016
  48. Johannes SchindelinJan 26, 2016
  49. 19/19 mingw: do not bother to test funny file namesJohannes Schindelin, Jan 24, 2016
  50. Junio C HamanoJan 25, 2016
  51. Johannes SchindelinJan 25, 2016
  52. 00/19 Let Git's tests pass on WindowsJohannes Schindelin, Jan 26, 2016
  53. 01/19 mingw: let's use gettext with MSYS2Johannes Schindelin, Jan 26, 2016
  54. 02/19 mingw: do not trust MSYS2's MinGW gettext.shJohannes Schindelin, Jan 26, 2016
  55. 03/19 Git.pm: stop assuming that absolute paths start with a slashJohannes Schindelin, Jan 26, 2016
  56. 04/19 mingw: factor out Windows specific environment setupJohannes Schindelin, Jan 26, 2016
  57. 05/19 mingw: prepare the TMPDIR environment variable for shell scriptsJohannes Schindelin, Jan 26, 2016
  58. 06/19 mingw: try to delete target directory before renamingJohannes Schindelin, Jan 26, 2016
  59. 07/19 mingw: let lstat() fail with errno == ENOTDIR when appropriateJohannes Schindelin, Jan 26, 2016
  60. 08/19 mingw: fix t5601-clone.shJohannes Schindelin, Jan 26, 2016
  61. 09/19 mingw: accomodate t0060-path-utils for MSYS2Johannes Schindelin, Jan 26, 2016
  62. 10/19 mingw: disable mkfifo-based testsJohannes Schindelin, Jan 26, 2016
  63. 11/19 tests: turn off git-daemon tests if FIFOs are not availableJohannes Schindelin, Jan 26, 2016
  64. 12/19 mingw: skip test in t1508 that fails due to path conversionJohannes Schindelin, Jan 26, 2016
  65. Junio C HamanoJan 26, 2016
  66. Johannes SchindelinJan 27, 2016
  67. Junio C HamanoJan 27, 2016
  68. Johannes SchindelinJan 28, 2016
  69. 13/19 mingw: fix t9700's assumption about directory separatorsJohannes Schindelin, Jan 26, 2016
  70. 14/19 mingw: work around pwd issues in the testsJohannes Schindelin, Jan 26, 2016
  71. 15/19 Avoid absolute path in t0008Johannes Schindelin, Jan 26, 2016
  72. 16/19 mingw: mark t9100's test cases with appropriate prereqsJohannes Schindelin, Jan 26, 2016
  73. Junio C HamanoJan 26, 2016
  74. Johannes SchindelinJan 27, 2016
  75. 17/19 mingw: avoid illegal filename in t9118Johannes Schindelin, Jan 26, 2016
  76. 18/19 mingw: handle the missing POSIXPERM prereq in t9124Johannes Schindelin, Jan 26, 2016
  77. Junio C HamanoJan 26, 2016
  78. Johannes SchindelinJan 27, 2016
  79. 19/19 mingw: do not bother to test funny file namesJohannes Schindelin, Jan 26, 2016
  80. Eric SunshineJan 26, 2016
  81. Junio C HamanoJan 26, 2016
  82. Johannes SchindelinJan 27, 2016
  83. Junio C HamanoJan 26, 2016
  84. Johannes SchindelinJan 27, 2016
  85. Junio C HamanoJan 27, 2016
  86. 00/20 Let Git's tests pass on WindowsJohannes Schindelin, Jan 27, 2016
  87. 01/20 mingw: let's use gettext with MSYS2Johannes Schindelin, Jan 27, 2016
  88. 02/20 mingw: do not trust MSYS2's MinGW gettext.shJohannes Schindelin, Jan 27, 2016
  89. 03/20 Git.pm: stop assuming that absolute paths start with a slashJohannes Schindelin, Jan 27, 2016
  90. 04/20 mingw: factor out Windows specific environment setupJohannes Schindelin, Jan 27, 2016
  91. 05/20 mingw: prepare the TMPDIR environment variable for shell scriptsJohannes Schindelin, Jan 27, 2016
  92. 06/20 mingw: try to delete target directory before renamingJohannes Schindelin, Jan 27, 2016
  93. 07/20 mingw: let lstat() fail with errno == ENOTDIR when appropriateJohannes Schindelin, Jan 27, 2016
  94. 08/20 mingw: fix t5601-clone.shJohannes Schindelin, Jan 27, 2016
  95. 09/20 mingw: accomodate t0060-path-utils for MSYS2Johannes Schindelin, Jan 27, 2016
  96. 10/20 mingw: disable mkfifo-based testsJohannes Schindelin, Jan 27, 2016
  97. 11/20 tests: turn off git-daemon tests if FIFOs are not availableJohannes Schindelin, Jan 27, 2016
  98. Eric SunshineJan 28, 2016
  99. Johannes SchindelinJan 28, 2016
  100. Junio C HamanoJan 28, 2016
  101. 12/20 mingw: skip test in t1508 that fails due to path conversionJohannes Schindelin, Jan 27, 2016
  102. 13/20 mingw: fix t9700's assumption about directory separatorsJohannes Schindelin, Jan 27, 2016
  103. 14/20 mingw: work around pwd issues in the testsJohannes Schindelin, Jan 27, 2016
  104. 15/20 Avoid absolute path in t0008Johannes Schindelin, Jan 27, 2016
  105. 16/20 mingw: mark t9100's test cases with appropriate prereqsJohannes Schindelin, Jan 27, 2016
  106. Johannes SchindelinJan 27, 2016
  107. 17/20 mingw: avoid illegal filename in t9118Johannes Schindelin, Jan 27, 2016
  108. 18/20 mingw: handle the missing POSIXPERM prereq in t9124Johannes Schindelin, Jan 27, 2016
  109. 19/20 mingw: skip a test in t9130 that cannot pass on WindowsJohannes Schindelin, Jan 27, 2016
  110. 20/20 mingw: do not bother to test funny file namesJohannes Schindelin, Jan 27, 2016
  111. Eric SunshineJan 28, 2016
  112. Johannes SchindelinJan 28, 2016
  113. Junio C HamanoJan 28, 2016

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.