send-email: recognize absolute path on Windows
authorErik Faye-Lund <kusmabite@googlemail.com>
Wed, 16 Apr 2014 08:08:18 +0000 (10:08 +0200)
committerJunio C Hamano <gitster@pobox.com>
Wed, 16 Apr 2014 18:51:16 +0000 (11:51 -0700)
On Windows, absolute paths might start with a DOS drive prefix,
which these two checks failed 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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-send-email.perl
index fdb0029b597898559376b1b28d692450794251f3..8f5f986e649c14468df3933e59c6f67b15fe55c5 100755 (executable)
@@ -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 @@ sub send_message {
 
        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) {
@@ -1271,7 +1283,7 @@ sub send_message {
                printf (($dry_run ? "Dry-" : "")."Sent %s\n", $subject);
        } else {
                print (($dry_run ? "Dry-" : "")."OK. Log says:\n");
-               if ($smtp_server !~ m#^/#) {
+               if (!file_name_is_absolute($smtp_server)) {
                        print "Server: $smtp_server\n";
                        print "MAIL FROM:<$raw_from>\n";
                        foreach my $entry (@recipients) {