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 \
>