[prev in list] [next in list] [prev in thread] [next in thread] 

List:       git
Subject:    Re: [PATCH] send-email: recognize absolute path on Windows
From:       Erik Faye-Lund <kusmabite () gmail ! com>
Date:       2014-04-15 10:42:15
Message-ID: CABPQNSafmC-7zNJZJSZm598pF37_xUMUopgZ3c=ttL_wRDYsfQ () mail ! gmail ! com
[Download RAW message or body]

On Tue, Apr 15, 2014 at 12:32 PM, Johannes Sixt <j.sixt@viscovery.net> wrote:
> Am 4/15/2014 10:44, schrieb Erik Faye-Lund:
>> From: Erik Faye-Lund <kusmabite@googlemail.com>
>>
>> On Windows, absolute paths might start with a DOS drive prefix,
>> which this check fails to recognize.
>>
>> Unfortunately, we cannot simply use the file_name_is_absolute
>> helper in File::Spec::Functions, because Git for Windows has an
>> MSYS-based Perl, where this helper doesn't grok DOS
>> drive-prefixes.
>>
>> So let's manually check for these in that case, and fall back to
>> the File::Spec-helper on other platforms (e.g Win32 with native
>> Perl)
>>
>> Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com>
>> ---
>>
>> Here's a patch that we've been running with a variation of in
>> Git for Windows for a while. That version wasn't quite palatable,
>> as it recognized DOS drive-prefixes on all platforms.
>
> Did you consider patching msysgit's lib/perl5/5.8.8/File/Spec.pm by
> inserting a line "msys => 'Win32'," near the top of the file; it is the
> hash table that decides which path "style" is selected depending on $^O.
> Then File::Spec->file_name_is_absolute($path) could be used without a wrapper.

I did not, but that works, and is IMO much nicer. Thanks for the idea!

>>
>>  git-send-email.perl | 14 +++++++++++++-
>>  1 file changed, 13 insertions(+), 1 deletion(-)
>>
>> diff --git a/git-send-email.perl b/git-send-email.perl
>> index fdb0029..c4d85a7 100755
>> --- a/git-send-email.perl
>> +++ b/git-send-email.perl
>> @@ -1113,6 +1113,18 @@ sub ssl_verify_params {
>>       }
>>  }
>>
>> +sub file_name_is_absolute {
>> +     my ($path) = @_;
>> +
>> +     # msys does not grok DOS drive-prefixes
>> +     if ($^O eq 'msys') {
>> +             return ($path =~ m#^/# || $path =~ m#[a-zA-Z]\:#)
>> +     }
>> +
>> +     require File::Spec::Functions;
>> +     return File::Spec::Functions::file_name_is_absolute($path);
>> +}
>> +
>>  # Returns 1 if the message was sent, and 0 otherwise.
>>  # In actuality, the whole program dies when there
>>  # is an error sending a message.
>> @@ -1197,7 +1209,7 @@ X-Mailer: git-send-email $gitversion
>>
>>       if ($dry_run) {
>>               # We don't want to send the email.
>> -     } elsif ($smtp_server =~ m#^/#) {
>> +     } elsif (file_name_is_absolute($smtp_server)) {
>>               my $pid = open my $sm, '|-';
>>               defined $pid or die $!;
>>               if (!$pid) {
>>
>
> There's another instance in the non-$quiet code path around line 1275 that
> needs the same treatment.

Good catch, thanks!
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic