Merge branch 'master' into next
[gitweb.git] / git-send-email.perl
index d2af98ac0c9645494ef484ee91cb853840cb630f..703dd1ff9ee641b58ad592cfc702de7f96c59eed 100755 (executable)
 use Getopt::Long;
 use Data::Dumper;
 use Net::SMTP;
-use Email::Valid;
 
 # most mail servers generate the Date: header, but not all...
 $ENV{LC_ALL} = 'C';
 use POSIX qw/strftime/;
 
+my $have_email_valid = eval { require Email::Valid; 1 };
 my $smtp;
 
 sub unique_email_list(@);
@@ -250,6 +250,16 @@ sub gitvar_ident {
 # Variables we set as part of the loop over files
 our ($message_id, $cc, %mail, $subject, $reply_to, $message);
 
+sub extract_valid_address {
+       my $address = shift;
+       if ($have_email_valid) {
+               return Email::Valid->address($address);
+       } else {
+               # less robust/correct than the monster regexp in Email::Valid,
+               # but still does a 99% job, and one less dependency
+               return ($address =~ /([^\"<>\s]+@[^<>\s]+)/);
+       }
+}
 
 # Usually don't need to change anything below here.
 
@@ -259,7 +269,7 @@ sub gitvar_ident {
 # 1 second since the last time we were called.
 
 # We'll setup a template for the message id, using the "from" address:
-my $message_id_from = Email::Valid->address($from);
+my $message_id_from = extract_valid_address($from);
 my $message_id_template = "<%s-git-send-email-$message_id_from>";
 
 sub make_message_id
@@ -281,6 +291,13 @@ sub send_message
        my $to = join (",\n\t", @recipients);
        @recipients = unique_email_list(@recipients,@cc);
        my $date = strftime('%a, %d %b %Y %H:%M:%S %z', localtime($time++));
+       my $gitversion = '@@GIT_VERSION@@';
+       if ($gitversion =~ m/..GIT_VERSION../) {
+           $gitversion = `git --version`;
+           chomp $gitversion;
+           # keep only what's after the last space
+           $gitversion =~ s/^.* //;
+       }
 
        my $header = "From: $from
 To: $to
@@ -289,7 +306,7 @@ sub send_message
 Reply-To: $from
 Date: $date
 Message-Id: $message_id
-X-Mailer: git-send-email @@GIT_VERSION@@
+X-Mailer: git-send-email $gitversion
 ";
        $header .= "In-Reply-To: $reply_to\n" if $reply_to;
 
@@ -413,7 +430,7 @@ (@)
        my @emails;
 
        foreach my $entry (@_) {
-               my $clean = Email::Valid->address($entry);
+               my $clean = extract_valid_address($entry);
                next if $seen{$clean}++;
                push @emails, $entry;
        }