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

Re: [PATCH 1/2] tests(gpg): allow the gpg-agent to start on Windows

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Mar 24, 2020, 19:55 UTC
Message-ID
<nycvar.QRO.7.76.6.2003242043050.46@tvgsbejvaqbjf.bet>
In-Reply-To
<xmqqd09355h7.fsf@gitster.c.googlers.com>
Hi Junio,
On Mon, 23 Mar 2020, Junio C Hamano wrote:
Show 27 quoted lines
> "Johannes Schindelin via GitGitGadget" <gitgitgadget@gmail.com>
> writes:
>
> > From: Johannes Schindelin <johannes.schindelin@gmx.de>
> >
> > In Git for Windows' SDK, we use the MSYS2 version of OpenSSH, meaning
> > that the `gpg-agent` will fail horribly when being passed a `--homedir`
> > that contains colons.
> >
> > Previously, we did pass the Windows version of the absolute path,
> > though, which starts in the drive letter followed by, you guessed it, a
> > colon.
> >
> > Let's use the same trick found elsewhere in our test suite where `$PWD`
> > is used to refer to the pseudo-Unix path (which works only within the
> > MSYS2 Bash/OpenSSH/Perl/etc, as opposed to `$(pwd)` which refers to the
> > Windows path that `git.exe` understands, too).
>
> Makes sense.
>
> Do we have a short/concise instruction, e.g. "You should use $(pwd)
> in most cases, but for such and such purposes use $PWD instead", in
> t/README for test writers, who are not familiar with the distinction
> between $(pwd) and $PWD, to help them decide which one to use in
> what situation?  I see this kind of fix-ups from time to time, and
> am wondering if there is a way to reduce the need for you or J6t to
> spot and fix the new ones.

I fear that this distinction really is lost on anybody who does not have to deal with MSYS2 on Windows.

It is subtle enough a distinction, too: whenever Bash or Perl is concerned, we _might_ run into this issue. I say _might_ because _some_ scripts actually handle Windows paths correctly, but others don't (testing for absolute paths by looking for a slash at the beginning would be an example, and it gets really hairy when you slap Windows paths at the end of `PATH`, separated by, you guessed it, a colon).

It gets even worse: you might think that you have to use `$(pwd)` when passing the path to `git.exe` (because it is a non-MSYS2 program). But you don't, in many cases. For example, when you call

	git config my.pwd "$PWD"

it totally works (because the MSYS2 runtime on top of which Bash runs will convert the parameters that are passed to a non-MSYS2 program when they look like paths).

The problem solved by _this here_ patch is the opposite, of course: we are passing a Windows path (`$(pwd)` implicitly calls `$(pwd -W)` in our test suite on Windows) to an _MSYS2_ program: `gpg.exe`. And how would contributors whose main development platform isn't Windows be able to guess that `gpg.exe` is an MSYS2 program as opposed to, say, `tclsh.exe` which is a non-MSYS2 program? They wouldn't.

In short: I am convinced that this is a subtlety in our test suite that we cannot reasonably expect any contributors other than Windows-based ones to get right, and I am fairly certain that we will just have to keep monitoring the CI/PR builds for similar issues and then help the contributors by suggesting the appropriate fixes.

Ciao, Dscho

Show 21 quoted lines
> Thanks.
>
> > Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> > ---
> >  t/lib-gpg.sh | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/t/lib-gpg.sh b/t/lib-gpg.sh
> > index 8d28652b729..11b83b8c24a 100755
> > --- a/t/lib-gpg.sh
> > +++ b/t/lib-gpg.sh
> > @@ -29,7 +29,7 @@ then
> >  		#		> lib-gpg/ownertrust
> >  		mkdir ./gpghome &&
> >  		chmod 0700 ./gpghome &&
> > -		GNUPGHOME="$(pwd)/gpghome" &&
> > +		GNUPGHOME="$PWD/gpghome" &&
> >  		export GNUPGHOME &&
> >  		(gpgconf --kill gpg-agent >/dev/null 2>&1 || : ) &&
> >  		gpg --homedir "${GNUPGHOME}" 2>/dev/null --import \
>
Previous: Junio C HamanoNext: Junio C Hamano
Message 15 of 55 in “Enable GPG in the Windows part of the CI/PR builds”
  1. 0/2 Enable GPG in the Windows part of the CI/PR buildsJohannes Schindelin via GitGitGadget, Mar 23, 2020
  2. 2/2 tests(gpg): increase verbosity to allow debuggingJohannes Schindelin via GitGitGadget, Mar 23, 2020
  3. Jeff KingMar 23, 2020
  4. Jeff KingMar 23, 2020
  5. Junio C HamanoMar 23, 2020
  6. Jeff KingMar 23, 2020
  7. Junio C HamanoMar 23, 2020
  8. Jeff KingMar 23, 2020
  9. Johannes SchindelinMar 24, 2020
  10. Jeff KingMar 24, 2020
  11. Johannes SchindelinMar 24, 2020
  12. Jeff KingMar 24, 2020
  13. 1/2 tests(gpg): allow the gpg-agent to start on WindowsJohannes Schindelin via GitGitGadget, Mar 23, 2020
  14. Junio C HamanoMar 23, 2020
  15. Johannes SchindelinMar 24, 2020
  16. Junio C HamanoMar 24, 2020
  17. Johannes SchindelinMar 24, 2020
  18. Junio C HamanoMar 24, 2020
  19. 0/5 Enable GPG in the Windows part of the CI/PR buildsJohannes Schindelin via GitGitGadget, Mar 25, 2020
  20. 1/5 tests(gpg): allow the gpg-agent to start on WindowsJohannes Schindelin via GitGitGadget, Mar 25, 2020
  21. 2/5 t/lib-gpg.sh: stop pretending to be a stand-alone scriptJohannes Schindelin via GitGitGadget, Mar 25, 2020
  22. Jeff KingMar 26, 2020
  23. Johannes SchindelinMar 26, 2020
  24. Junio C HamanoMar 26, 2020
  25. 3/5 tests: turn GPG, GPGSM and RFC1991 into lazy prereqsJohannes Schindelin via GitGitGadget, Mar 25, 2020
  26. Junio C HamanoMar 25, 2020
  27. Jeff KingMar 26, 2020
  28. Johannes SchindelinMar 26, 2020
  29. Jeff KingMar 27, 2020
  30. Junio C HamanoMar 27, 2020
  31. Eric SunshineMar 27, 2020
  32. Junio C HamanoMar 27, 2020
  33. Jeff KingMar 28, 2020
  34. Jeff KingMar 28, 2020
  35. t/README: suggest how to leave test early with failureJunio C Hamano, Mar 28, 2020
  36. Eric SunshineMar 29, 2020
  37. Jeff KingMar 29, 2020
  38. Johannes SchindelinMar 30, 2020
  39. Jeff KingMar 31, 2020
  40. 4/5 tests: do not let lazy prereqs inside `test_expect_*` turn off tracingJohannes Schindelin via GitGitGadget, Mar 25, 2020
  41. Junio C HamanoMar 25, 2020
  42. Johannes SchindelinMar 26, 2020
  43. Jeff KingMar 26, 2020
  44. Johannes SchindelinMar 26, 2020
  45. 5/5 tests: increase the verbosity of the GPG-related prereqsJohannes Schindelin via GitGitGadget, Mar 25, 2020
  46. Jeff KingMar 26, 2020
  47. Johannes SchindelinMar 26, 2020
  48. 0/5 Enable GPG in the Windows part of the CI/PR buildsJohannes Schindelin via GitGitGadget, Mar 26, 2020
  49. 2/5 t/lib-gpg.sh: stop pretending to be a stand-alone scriptJohannes Schindelin via GitGitGadget, Mar 26, 2020
  50. 1/5 tests(gpg): allow the gpg-agent to start on WindowsJohannes Schindelin via GitGitGadget, Mar 26, 2020
  51. 3/5 tests: do not let lazy prereqs inside `test_expect_*` turn off tracingJohannes Schindelin via GitGitGadget, Mar 26, 2020
  52. 4/5 tests: turn GPG, GPGSM and RFC1991 into lazy prereqsJohannes Schindelin via GitGitGadget, Mar 26, 2020
  53. 5/5 tests: increase the verbosity of the GPG-related prereqsJohannes Schindelin via GitGitGadget, Mar 26, 2020
  54. Jeff KingMar 27, 2020
  55. Junio C HamanoMar 27, 2020

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.