diff mbox series

scripts/get_maintainer: Use .ignoredmailmap to ignore invalid emails

Message ID 20200629172716.20781-1-f4bug@amsat.org
State New
Headers show
Series scripts/get_maintainer: Use .ignoredmailmap to ignore invalid emails | expand

Commit Message

Philippe Mathieu-Daudé June 29, 2020, 5:27 p.m. UTC
Sometime emails get rejected and 'bounce'. It might take time
between we report that, a patch is posted, reviewed, merged...

To reduce time spent looking at bouncing emails in one mailbox,
add the feature to simply ignore broken email addresses. The
format is similar to the '.mailmap' file. Add an email address
in your local '.ignoredmailmap. and get_maintainer.pl won't
list it anymore.

This is particularly useful when git-send-email is used with
the --cc-cmd argument, like suggested in QEMU wiki:
https://wiki.qemu.org/Contribute/SubmitAPatch#CC_the_relevant_maintainer

Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 scripts/get_maintainer.pl | 50 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 50 insertions(+)
diff mbox series

Patch

diff --git a/scripts/get_maintainer.pl b/scripts/get_maintainer.pl
index 271f5ff42a..7f7a4ff3ef 100755
--- a/scripts/get_maintainer.pl
+++ b/scripts/get_maintainer.pl
@@ -38,6 +38,7 @@ 
 my $interactive = 0;
 my $email_remove_duplicates = 1;
 my $email_use_mailmap = 1;
+my $email_use_ignoredmailmap = 1;
 my $output_multiline = 1;
 my $output_separator = ", ";
 my $output_roles = 0;
@@ -365,6 +366,51 @@  sub read_mailmap {
     close($mailmap_file);
 }
 
+my $ignoredmailmap;
+
+read_ignoredmailmap();
+
+sub read_ignoredmailmap {
+    $ignoredmailmap = {
+	names => {},
+	addresses => {}
+    };
+
+    return if (!$email_use_ignoredmailmap || !(-f "${lk_path}.ignoredmailmap"));
+
+    open(my $ignoredmailmap_file, '<', "${lk_path}.ignoredmailmap")
+	or warn "$P: Can't open .ignoredmailmap: $!\n";
+
+    while (<$ignoredmailmap_file>) {
+	s/#.*$//; #strip comments
+	s/^\s+|\s+$//g; #trim
+
+	next if (/^\s*$/); #skip empty lines
+	#entries have one of the following formats:
+	# name1 <mail1>
+	# <mail1>
+
+	if (/^([^<]+)<([^>]+)>$/) {
+	    my $real_name = $1;
+	    my $address = $2;
+
+	    $real_name =~ s/\s+$//;
+	    ($real_name, $address) = parse_email("$real_name <$address>");
+	    $ignoredmailmap->{$address} = 1;
+	} elsif (/^(.+)<([^>]+)>\s*<([^>]+)>$/) {
+	    my $real_name = $1;
+	    my $real_address = $2;
+	    my $wrong_address = $3;
+
+	    $real_name =~ s/\s+$//;
+	    ($real_name, $real_address) =
+		parse_email("$real_name <$real_address>");
+	    $ignoredmailmap->{$real_address} = 1;
+	}
+    }
+    close($ignoredmailmap_file);
+}
+
 ## use the filenames on the command line or find the filenames in the patchfiles
 
 my @files = ();
@@ -1074,6 +1120,10 @@  sub push_email_address {
     if ($address eq "") {
 	return 0;
     }
+    if (exists $ignoredmailmap->{$address}) {
+        #warn("Ignoring address: '" . $address . "'\n");
+        return 0;
+    }
 
     if (!$email_remove_duplicates) {
 	push(@email_to, [format_email($name, $address, $email_usename), $role]);