All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3] send-email: recognize absolute path on Windows
@ 2014-04-16  8:08 Erik Faye-Lund
  2014-04-16 17:03 ` Junio C Hamano
  0 siblings, 1 reply; 7+ messages in thread
From: Erik Faye-Lund @ 2014-04-16  8:08 UTC (permalink / raw)
  To: git; +Cc: msysgit, johannes.schindelin, j.sixt, gitster

From: Erik Faye-Lund <kusmabite@googlemail.com>

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

So here's a version that does the old and long-time tested
approach without requiring breaking changes to msysGit's perl.

 git-send-email.perl | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/git-send-email.perl b/git-send-email.perl
index fdb0029..8f5f986 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) {
@@ -1271,7 +1283,7 @@ X-Mailer: git-send-email $gitversion
 		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) {
-- 
1.9.0.msysgit.0

-- 
-- 
*** Please reply-to-all at all times ***
*** (do not pretend to know who is subscribed and who is not) ***
*** Please avoid top-posting. ***
The msysGit Wiki is here: https://github.com/msysgit/msysgit/wiki - Github accounts are free.

You received this message because you are subscribed to the Google
Groups "msysGit" group.
To post to this group, send email to msysgit@googlegroups.com
To unsubscribe from this group, send email to
msysgit+unsubscribe@googlegroups.com
For more options, and view previous threads, visit this group at
http://groups.google.com/group/msysgit?hl=en_US?hl=en

--- 
You received this message because you are subscribed to the Google Groups "msysGit" group.
To unsubscribe from this group and stop receiving emails from it, send an email to msysgit+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH v3] send-email: recognize absolute path on Windows
  2014-04-16  8:08 [PATCH v3] send-email: recognize absolute path on Windows Erik Faye-Lund
@ 2014-04-16 17:03 ` Junio C Hamano
  2014-04-16 17:19   ` Junio C Hamano
  0 siblings, 1 reply; 7+ messages in thread
From: Junio C Hamano @ 2014-04-16 17:03 UTC (permalink / raw)
  To: Erik Faye-Lund; +Cc: git, msysgit, johannes.schindelin, j.sixt

Erik Faye-Lund <kusmabite@gmail.com> writes:

> 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)
> ...
> +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]\:#)

Shouldn't the latter also be anchored at the beginning of the string
with a leading "^"?

> +	}
> +
> +	require File::Spec::Functions;
> +	return File::Spec::Functions::file_name_is_absolute($path);

We already "use File::Spec qw(something else)" at the beginning, no?
Why not throw file_name_is_absolute into that qw() instead?

> +}
> +
>  # 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) {
> @@ -1271,7 +1283,7 @@ X-Mailer: git-send-email $gitversion
>  		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) {
> -- 
> 1.9.0.msysgit.0
>
> -- 

-- 
-- 
*** Please reply-to-all at all times ***
*** (do not pretend to know who is subscribed and who is not) ***
*** Please avoid top-posting. ***
The msysGit Wiki is here: https://github.com/msysgit/msysgit/wiki - Github accounts are free.

You received this message because you are subscribed to the Google
Groups "msysGit" group.
To post to this group, send email to msysgit@googlegroups.com
To unsubscribe from this group, send email to
msysgit+unsubscribe@googlegroups.com
For more options, and view previous threads, visit this group at
http://groups.google.com/group/msysgit?hl=en_US?hl=en

--- 
You received this message because you are subscribed to the Google Groups "msysGit" group.
To unsubscribe from this group and stop receiving emails from it, send an email to msysgit+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v3] send-email: recognize absolute path on Windows
  2014-04-16 17:03 ` Junio C Hamano
@ 2014-04-16 17:19   ` Junio C Hamano
  2014-04-17  1:45     ` brian m. carlson
  2014-04-22 12:15     ` Erik Faye-Lund
  0 siblings, 2 replies; 7+ messages in thread
From: Junio C Hamano @ 2014-04-16 17:19 UTC (permalink / raw)
  To: Erik Faye-Lund; +Cc: git, msysgit, johannes.schindelin, j.sixt

Junio C Hamano <gitster@pobox.com> writes:

> Erik Faye-Lund <kusmabite@gmail.com> writes:
>
>> 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)
>> ...
>> +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]\:#)
>
> Shouldn't the latter also be anchored at the beginning of the string
> with a leading "^"?
>
>> +	}
>> +
>> +	require File::Spec::Functions;
>> +	return File::Spec::Functions::file_name_is_absolute($path);
>
> We already "use File::Spec qw(something else)" at the beginning, no?
> Why not throw file_name_is_absolute into that qw() instead?

Ahh, OK, if you did so, you won't have any place to hook the "only
on msys do this" trick into.

It somehow feels somewhat confusing that we define a sub with the
same name as the system one, while not overriding it entirely but
delegate back to the system one.  I am debating myself if it is more
obvious if it is done this way:

        use File::Spec::Functions qw(file_name_is_absolute);
        if ($^O eq 'msys') {
                sub file_name_is_absolute {
                	return $_[0] =~ /^\// || $_[0] =~ /^[A-Z]:/i;
                }
        }

>>  # 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) {
>> @@ -1271,7 +1283,7 @@ X-Mailer: git-send-email $gitversion
>>  		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) {
>> -- 
>> 1.9.0.msysgit.0
>>
>> -- 
>
> -- 

-- 
-- 
*** Please reply-to-all at all times ***
*** (do not pretend to know who is subscribed and who is not) ***
*** Please avoid top-posting. ***
The msysGit Wiki is here: https://github.com/msysgit/msysgit/wiki - Github accounts are free.

You received this message because you are subscribed to the Google
Groups "msysGit" group.
To post to this group, send email to msysgit@googlegroups.com
To unsubscribe from this group, send email to
msysgit+unsubscribe@googlegroups.com
For more options, and view previous threads, visit this group at
http://groups.google.com/group/msysgit?hl=en_US?hl=en

--- 
You received this message because you are subscribed to the Google Groups "msysGit" group.
To unsubscribe from this group and stop receiving emails from it, send an email to msysgit+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v3] send-email: recognize absolute path on Windows
  2014-04-16 17:19   ` Junio C Hamano
@ 2014-04-17  1:45     ` brian m. carlson
  2014-04-22 12:15     ` Erik Faye-Lund
  1 sibling, 0 replies; 7+ messages in thread
From: brian m. carlson @ 2014-04-17  1:45 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Erik Faye-Lund, git, msysgit, johannes.schindelin, j.sixt

[-- Attachment #1: Type: text/plain, Size: 947 bytes --]

On Wed, Apr 16, 2014 at 10:19:54AM -0700, Junio C Hamano wrote:
> Ahh, OK, if you did so, you won't have any place to hook the "only
> on msys do this" trick into.
> 
> It somehow feels somewhat confusing that we define a sub with the
> same name as the system one, while not overriding it entirely but
> delegate back to the system one.  I am debating myself if it is more
> obvious if it is done this way:
> 
>         use File::Spec::Functions qw(file_name_is_absolute);
>         if ($^O eq 'msys') {

You would probably want a "no warnings 'redefine'" here as well.

>                 sub file_name_is_absolute {
>                 	return $_[0] =~ /^\// || $_[0] =~ /^[A-Z]:/i;
>                 }
>         }

-- 
brian m. carlson / brian with sandals: Houston, Texas, US
+1 832 623 2791 | http://www.crustytoothpaste.net/~bmc | My opinion only
OpenPGP: RSA v4 4096b: 88AC E9B2 9196 305B A994 7552 F1BA 225C 0223 B187

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v3] send-email: recognize absolute path on Windows
  2014-04-16 17:19   ` Junio C Hamano
  2014-04-17  1:45     ` brian m. carlson
@ 2014-04-22 12:15     ` Erik Faye-Lund
  2014-04-22 16:50       ` Junio C Hamano
  1 sibling, 1 reply; 7+ messages in thread
From: Erik Faye-Lund @ 2014-04-22 12:15 UTC (permalink / raw)
  To: Junio C Hamano
  Cc: GIT Mailing-list, msysGit, Johannes Schindelin, Johannes Sixt

On Wed, Apr 16, 2014 at 7:19 PM, Junio C Hamano <gitster@pobox.com> wrote:
> Junio C Hamano <gitster@pobox.com> writes:
>
>> Erik Faye-Lund <kusmabite@gmail.com> writes:
>>
>>> 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)
>>> ...
>>> +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]\:#)
>>
>> Shouldn't the latter also be anchored at the beginning of the string
>> with a leading "^"?
>>
>>> +    }
>>> +
>>> +    require File::Spec::Functions;
>>> +    return File::Spec::Functions::file_name_is_absolute($path);
>>
>> We already "use File::Spec qw(something else)" at the beginning, no?
>> Why not throw file_name_is_absolute into that qw() instead?
>
> Ahh, OK, if you did so, you won't have any place to hook the "only
> on msys do this" trick into.
>
> It somehow feels somewhat confusing that we define a sub with the
> same name as the system one, while not overriding it entirely but
> delegate back to the system one.  I am debating myself if it is more
> obvious if it is done this way:
>
>         use File::Spec::Functions qw(file_name_is_absolute);
>         if ($^O eq 'msys') {
>                 sub file_name_is_absolute {
>                         return $_[0] =~ /^\// || $_[0] =~ /^[A-Z]:/i;
>                 }
>         }
>

In this case, we end up requiring that module even when we end up
using it, no? Not that I have very strong objections for doing just
that, after all, it appears to be built-in. (As you might understand
from this message, my perl-fu is really lacking :-P)

-- 
-- 
*** Please reply-to-all at all times ***
*** (do not pretend to know who is subscribed and who is not) ***
*** Please avoid top-posting. ***
The msysGit Wiki is here: https://github.com/msysgit/msysgit/wiki - Github accounts are free.

You received this message because you are subscribed to the Google
Groups "msysGit" group.
To post to this group, send email to msysgit@googlegroups.com
To unsubscribe from this group, send email to
msysgit+unsubscribe@googlegroups.com
For more options, and view previous threads, visit this group at
http://groups.google.com/group/msysgit?hl=en_US?hl=en

--- 
You received this message because you are subscribed to the Google Groups "msysGit" group.
To unsubscribe from this group and stop receiving emails from it, send an email to msysgit+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v3] send-email: recognize absolute path on Windows
  2014-04-22 12:15     ` Erik Faye-Lund
@ 2014-04-22 16:50       ` Junio C Hamano
  2014-04-23  9:30         ` Erik Faye-Lund
  0 siblings, 1 reply; 7+ messages in thread
From: Junio C Hamano @ 2014-04-22 16:50 UTC (permalink / raw)
  To: kusmabite; +Cc: GIT Mailing-list, msysGit, Johannes Schindelin, Johannes Sixt

Erik Faye-Lund <kusmabite@gmail.com> writes:

>>> Shouldn't the latter also be anchored at the beginning of the string
>>> with a leading "^"?
>>>
>>>> +    }
>>>> +
>>>> +    require File::Spec::Functions;
>>>> +    return File::Spec::Functions::file_name_is_absolute($path);
>>>
>>> We already "use File::Spec qw(something else)" at the beginning, no?
>>> Why not throw file_name_is_absolute into that qw() instead?
>>
>> Ahh, OK, if you did so, you won't have any place to hook the "only
>> on msys do this" trick into.
>>
>> It somehow feels somewhat confusing that we define a sub with the
>> same name as the system one, while not overriding it entirely but
>> delegate back to the system one.  I am debating myself if it is more
>> obvious if it is done this way:
>>
>>         use File::Spec::Functions qw(file_name_is_absolute);
>>         if ($^O eq 'msys') {
>>                 sub file_name_is_absolute {
>>                         return $_[0] =~ /^\// || $_[0] =~ /^[A-Z]:/i;
>>                 }
>>         }
>>
>
> In this case, we end up requiring that module even when we end up
> using it, no?

Also somebody earlier mentioned that we would be redefining, which
has a different kind of ugliness, so I'd agree with the code structure
of what you sent out (which has been queued on 'pu').

My earlier question "don't we want to make sure 'C:' is at the
betginning of the string?" still stands, though.  I do not think I
futzed with your regexp in the version I queued on 'pu'.

Thanks.


-- 
-- 
*** Please reply-to-all at all times ***
*** (do not pretend to know who is subscribed and who is not) ***
*** Please avoid top-posting. ***
The msysGit Wiki is here: https://github.com/msysgit/msysgit/wiki - Github accounts are free.

You received this message because you are subscribed to the Google
Groups "msysGit" group.
To post to this group, send email to msysgit@googlegroups.com
To unsubscribe from this group, send email to
msysgit+unsubscribe@googlegroups.com
For more options, and view previous threads, visit this group at
http://groups.google.com/group/msysgit?hl=en_US?hl=en

--- 
You received this message because you are subscribed to the Google Groups "msysGit" group.
To unsubscribe from this group and stop receiving emails from it, send an email to msysgit+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v3] send-email: recognize absolute path on Windows
  2014-04-22 16:50       ` Junio C Hamano
@ 2014-04-23  9:30         ` Erik Faye-Lund
  0 siblings, 0 replies; 7+ messages in thread
From: Erik Faye-Lund @ 2014-04-23  9:30 UTC (permalink / raw)
  To: Junio C Hamano
  Cc: GIT Mailing-list, msysGit, Johannes Schindelin, Johannes Sixt

On Tue, Apr 22, 2014 at 6:50 PM, Junio C Hamano <gitster@pobox.com> wrote:
> Erik Faye-Lund <kusmabite@gmail.com> writes:
>
>>>> Shouldn't the latter also be anchored at the beginning of the string
>>>> with a leading "^"?
>>>>
>>>>> +    }
>>>>> +
>>>>> +    require File::Spec::Functions;
>>>>> +    return File::Spec::Functions::file_name_is_absolute($path);
>>>>
>>>> We already "use File::Spec qw(something else)" at the beginning, no?
>>>> Why not throw file_name_is_absolute into that qw() instead?
>>>
>>> Ahh, OK, if you did so, you won't have any place to hook the "only
>>> on msys do this" trick into.
>>>
>>> It somehow feels somewhat confusing that we define a sub with the
>>> same name as the system one, while not overriding it entirely but
>>> delegate back to the system one.  I am debating myself if it is more
>>> obvious if it is done this way:
>>>
>>>         use File::Spec::Functions qw(file_name_is_absolute);
>>>         if ($^O eq 'msys') {
>>>                 sub file_name_is_absolute {
>>>                         return $_[0] =~ /^\// || $_[0] =~ /^[A-Z]:/i;
>>>                 }
>>>         }
>>>
>>
>> In this case, we end up requiring that module even when we end up
>> using it, no?
>
> Also somebody earlier mentioned that we would be redefining, which
> has a different kind of ugliness, so I'd agree with the code structure
> of what you sent out (which has been queued on 'pu').
>
> My earlier question "don't we want to make sure 'C:' is at the
> betginning of the string?" still stands, though.  I do not think I
> futzed with your regexp in the version I queued on 'pu'.

Ah, yes of course. Thanks for spotting that. I also like the other
clean-ups you did to the regex (above).

-- 
-- 
*** Please reply-to-all at all times ***
*** (do not pretend to know who is subscribed and who is not) ***
*** Please avoid top-posting. ***
The msysGit Wiki is here: https://github.com/msysgit/msysgit/wiki - Github accounts are free.

You received this message because you are subscribed to the Google
Groups "msysGit" group.
To post to this group, send email to msysgit@googlegroups.com
To unsubscribe from this group, send email to
msysgit+unsubscribe@googlegroups.com
For more options, and view previous threads, visit this group at
http://groups.google.com/group/msysgit?hl=en_US?hl=en

--- 
You received this message because you are subscribed to the Google Groups "msysGit" group.
To unsubscribe from this group and stop receiving emails from it, send an email to msysgit+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2014-04-23  9:31 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-04-16  8:08 [PATCH v3] send-email: recognize absolute path on Windows Erik Faye-Lund
2014-04-16 17:03 ` Junio C Hamano
2014-04-16 17:19   ` Junio C Hamano
2014-04-17  1:45     ` brian m. carlson
2014-04-22 12:15     ` Erik Faye-Lund
2014-04-22 16:50       ` Junio C Hamano
2014-04-23  9:30         ` Erik Faye-Lund

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.