git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 3/4] send-email: lazy-load Email::Valid and make it optional

From
EWEric Wong <normalperson@yhbt.net>
Date
Mar 25, 2006, 10:43 UTC
Message-ID
<11432834111972-git-send-email-normalperson@yhbt.net>
In-Reply-To
<11432834101430-git-send-email-normalperson@yhbt.net>

It's not installed on enough machines, and is overkill most of the time. We'll fallback to a very basic regexp (that is a looser variant of what Email::Valid allows) just in case, but nothing like the monster regexp Email::Valid has to offer :)

Signed-off-by: Eric Wong <normalperson@yhbt.net>
---
 git-send-email.perl |   16 +++++++++++++---
 1 files changed, 13 insertions(+), 3 deletions(-)
140eaf9b9d438ea489e6c72e2148feb3e355aea8
diff --git a/git-send-email.perl b/git-send-email.perl
index 5e08817..73bba19 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -22,12 +22,12 @@ use Term::ReadLine;
 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 or undef };
 my $smtp;
 
 sub unique_email_list(@);
@@ -250,6 +250,16 @@ EOT
 # 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 @@ our ($message_id, $cc, %mail, $subject, 
 # 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
@@ -412,7 +422,7 @@ sub unique_email_list(@) {
 	my @emails;
 
 	foreach my $entry (@_) {
-		my $clean = Email::Valid->address($entry);
+		my $clean = extract_valid_address($entry);
 		next if $seen{$clean}++;
 		push @emails, $entry;
 	}
-- 
1.2.4.gb622a
Previous: Ryan AndersonNext: Randal L. Schwartz
Message 20 of 24 in “send-email: dependency removal, cleanup, + small feature”
  1. Eric WongMar 25, 2006
  2. 1/4 send-email: Change from Mail::Sendmail to Net::SMTPEric Wong, Mar 25, 2006
  3. Ryan AndersonMar 25, 2006
  4. Eric WongMar 26, 2006
  5. Junio C HamanoMar 26, 2006
  6. send-email: Change from Mail::Sendmail to Net::SMTPEric Wong, Mar 26, 2006
  7. Martin LanghoffApr 26, 2006
  8. Junio C HamanoApr 26, 2006
  9. Martin LanghoffApr 26, 2006
  10. Eric WongApr 28, 2006
  11. Martin LanghoffApr 28, 2006
  12. 4/4 send-email: add support for mutt aliases filesEric Wong, Mar 25, 2006
  13. Junio C HamanoMar 25, 2006
  14. Ryan AndersonMar 25, 2006
  15. send-email: address expansion for common mailersEric Wong, Mar 26, 2006
  16. Junio C HamanoMar 26, 2006
  17. Eric WongMar 26, 2006
  18. send-email: address expansion for common mailersEric Wong, May 15, 2006
  19. Ryan AndersonMay 15, 2006
  20. 3/4 send-email: lazy-load Email::Valid and make it optionalEric Wong, Mar 25, 2006
  21. Randal L. SchwartzMar 25, 2006
  22. Junio C HamanoMar 25, 2006
  23. send-email: lazy-load Email::Valid and make it optionalEric Wong, Mar 26, 2006
  24. 2/4 send-email: use built-in time() instead of /bin/date '+%s'Eric Wong, Mar 25, 2006

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.