Re: [PATCH 0/6] Create Git/Packet.pm
flat view
From: Johannes Schindelin <hidden>
Date: 2017-10-27 15:11:49
Hi Bryan, On Thu, 26 Oct 2017, Bryan Turner wrote:
On Thu, Oct 26, 2017 at 2:07 AM, Jacob Keller [off-list ref] wrote:quoted
On Wed, Oct 25, 2017 at 10:38 PM, Junio C Hamano [off-list ref] wrote:quoted
Johannes Schindelin [off-list ref] writes:quoted
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 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. 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").I thought there was a way to do this in File::Spec, but that's only for splitting regular paths, and not for splitting a list of paths separated by ":" or ";" We probably should find a better solution to allow this to work with windows style paths...? I know that python provides os.pathsep, but I haven't seen an equivalent for perl yet. The Env[1] core modules suggests using $Config::Config{path_sep}[2].. maybe we should be using this?I was testing this recently on the Perl included with Git for Windows and it returns : for the path separator even though it's on Windows, so I don't think that would work. The Perl in Git for Windows seems to want UNIX-style inputs (something Dscho seemed to allude to in his response earlier.). I'm not sure why it's that way, but he probably knows.
MSYS2 Perl is essentially Cygwin's Perl ported over to MSYS2. And Cygwin tries to keep everything as pseudo Unix as possible, to make it easier to port software (if you think Git's source code is the only source code woefully unprepared for semicolons as path separators, you just need to buy me a few beers to hear plenty of war stories). Ciao, Dscho