Angle brackets around the --in-reply-to= arg for git send-email
has been optional since git v1.5.3.2, so strip them and make the
command-line argument easier-to-type.
$rv;
}
+sub squote_maybe ($) {
+ my ($val) = @_;
+ if ($val =~ m{([^\w@\./,\%\+\-])}) {
+ $val =~ s/(['!])/'\\$1'/g; # '!' for csh
+ return "'$val'";
+ }
+ $val;
+}
+
sub mailto_arg_link {
my ($hdr) = @_;
my %cc; # everyone else
my $subj = $hdr->header('Subject') || '';
$subj = "Re: $subj" unless $subj =~ /\bRe:/i;
my $mid = $hdr->header_raw('Message-ID');
- push @arg, "--in-reply-to='" . ascii_html($mid) . "'";
+ push @arg, '--in-reply-to='.ascii_html(squote_maybe(mid_clean($mid)));
my $irt = uri_escape_utf8($mid);
delete $cc{$to};
push @arg, '--to=' . ascii_html($to);
use warnings;
use Test::More;
use Email::MIME;
-use PublicInbox::View;
use Plack::Util;
+use_ok 'PublicInbox::View';
+
+my @q = (
+ 'foo@bar', 'foo@bar',
+ 'a b', "'a b'",
+ "a'b", "'a'\\''b'",
+);
+while (@q) {
+ my $input = shift @q;
+ my $expect = shift @q;
+ my $res = PublicInbox::View::squote_maybe($input);
+ is($res, $expect, "quote $input => $res");
+}
# FIXME: make this test less fragile
my $ctx = {