git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Johannes Schindelin <Johannes.Schindelin@gmx.de>
To: Junio C Hamano <gitster@pobox.com>
Cc: Christian Couder <christian.couder@gmail.com>,
	git@vger.kernel.org, Jeff King <peff@peff.net>,
	Ben Peart <Ben.Peart@microsoft.com>,
	Jonathan Tan <jonathantanmy@google.com>,
	Nguyen Thai Ngoc Duy <pclouds@gmail.com>,
	Mike Hommey <mh@glandium.org>,
	Lars Schneider <larsxschneider@gmail.com>,
	Eric Wong <e@80x24.org>,
	Christian Couder <chriscool@tuxfamily.org>
Subject: Re: [PATCH 0/6] Create Git/Packet.pm
Date: Fri, 27 Oct 2017 17:05:22 +0200 (CEST)	[thread overview]
Message-ID: <alpine.DEB.2.21.1.1710271626410.6482@virtualbox> (raw)
In-Reply-To: <xmqq4lqmfoy7.fsf@gitster.mtv.corp.google.com>

Hi Junio,

On Thu, 26 Oct 2017, Junio C Hamano wrote:

> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> 
> > Note that the correct blib path starts with `C:\BuildAgent\_work` and
> > the line
> >
> > 	use lib (split(/:/, $ENV{GITPERLLIB}));
> >
> > splits off the drive letter from the rest of the path. Obviously, this
> > fails to Do The Right Thing, and simply points to Yet Another Portability
> > Problem with Git's reliance on Unix scripting.
> 
> In our C code, we have "#define PATH_SEP ';'", and encourage our
> code to be careful and use it.  Is there something similar for Perl
> scripts, I wonder.
> 
> I notice that t/{t0202,t9000,t9700}/test.pl share the same
> split(/:/, $ENV{GITPERLLIB}); forcing this specific variable to use
> the non-platform convention to accomodate the use of split(/:/)
> certainly is a workaround, but it does feel dirty.

It is not only dirty, it *still* does not work with that workaround: Note
that GITPERLLIB is *also* set in the bin-wrappers/*...

And even then, it does not work: somewhere along the way, the path is
converted to a Windows path with backslashes, and for some reason MSYS2
Perl fails to handle that.

The best workaround I found in Git's source code (yes, it took me 2h to
investigate this littly problem, but at least I got an in-depth
understanding of the issue) was to pass BLIB_DIR instead, and not perform
a split but generate the two paths to include in Perl instead. Of course,
that would break out-of-tree usage of GITPERLLIB...

That's why I settled on the out-of-tree workaround that Windows
contributors will have to somehow figure out (as if it was not hard enough
already to contribute to Git for Windows...).

> It is hard to imagine that we were the first people who wants to
> split the value of a variable into a list, where the value is a list
> of paths, concatenated into a single string with a delimiter that
> may be platform specific.

No, the test suite has plenty of use cases for that. It usually works.

The problem is that t0021 contains very complex code that goes back and
forth between the C layer and the scripted layer. At one stage, the
pseudo-Unix paths are converted to Windows paths, with drive prefix and
backslashes, separated by semicolons. And somewhere along the lines, this
cannot be converted back.

I *think* that it happens when the bin-wrapper for git.exe is executed
from inside Git itself, or some such.

> I wonder if we are going against a best practice established in the Perl
> world, simply because we don't know about it (i.e. basically, it would
> say "don't split at a colon because not all world is Unix; use
> $this_module instead", similar to "don't split at a slash, use
> File::Spec instead to extract path components").

We go against best practices by having crucial parts of Git implemented as
Perl scripts. But you knew that ;-)

Ciao,
Dscho

  parent reply	other threads:[~2017-10-27 15:06 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-19 12:30 [PATCH 0/6] Create Git/Packet.pm Christian Couder
2017-10-19 12:30 ` [PATCH 1/6] t0021/rot13-filter: refactor packet reading functions Christian Couder
2017-10-19 22:01   ` Stefan Beller
2017-10-22  0:58   ` Junio C Hamano
2017-11-05 12:50     ` Christian Couder
2017-10-19 12:30 ` [PATCH 2/6] t0021/rot13-filter: improve 'if .. elsif .. else' style Christian Couder
2017-10-19 12:30 ` [PATCH 3/6] t0021/rot13-filter: improve error message Christian Couder
2017-10-19 12:30 ` [PATCH 4/6] t0021/rot13-filter: add packet_initialize() Christian Couder
2017-10-22  1:12   ` Junio C Hamano
2017-10-27  2:57     ` Junio C Hamano
2017-10-27  5:07       ` Christian Couder
2017-10-28 14:59       ` Lars Schneider
2017-10-29  0:14         ` Junio C Hamano
2017-10-19 12:30 ` [PATCH 5/6] t0021/rot13-filter: add capability functions Christian Couder
2017-10-22  1:46   ` Junio C Hamano
2017-11-04  8:38     ` Christian Couder
2017-11-05  2:03       ` Junio C Hamano
2017-10-19 12:30 ` [PATCH 6/6] Add Git/Packet.pm from parts of t0021/rot13-filter.pl Christian Couder
2017-10-19 22:06   ` Stefan Beller
2017-10-22  2:04 ` [PATCH 0/6] Create Git/Packet.pm Junio C Hamano
2017-10-23 12:26   ` Philip Oakley
2017-10-30 18:08     ` Jeff King
2017-10-25 23:10 ` Johannes Schindelin
2017-10-26  5:38   ` Junio C Hamano
2017-10-26  9:07     ` Jacob Keller
2017-10-26  9:08       ` Bryan Turner
2017-10-26  9:12       ` Bryan Turner
2017-10-27 15:09         ` Johannes Schindelin
2017-10-27 15:05     ` Johannes Schindelin [this message]
2017-10-30  0:38 ` Junio C Hamano
2017-10-30  6:18   ` Christian Couder
2017-10-30 12:37     ` Johannes Schindelin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.DEB.2.21.1.1710271626410.6482@virtualbox \
    --to=johannes.schindelin@gmx.de \
    --cc=Ben.Peart@microsoft.com \
    --cc=chriscool@tuxfamily.org \
    --cc=christian.couder@gmail.com \
    --cc=e@80x24.org \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jonathantanmy@google.com \
    --cc=larsxschneider@gmail.com \
    --cc=mh@glandium.org \
    --cc=pclouds@gmail.com \
    --cc=peff@peff.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).