Add central email address non-repetition filter
authorJacob Bachmeyer <jcb@gnu.org>
Fri, 28 Oct 2022 23:38:46 +0000 (18:38 -0500)
committerJacob Bachmeyer <jcb@gnu.org>
Fri, 28 Oct 2022 23:38:46 +0000 (18:38 -0500)
gatekeeper.pl

index 2999438c0f62fab89997bbd04a4ac91b9f8fcd2f..3c3fdb60babcfedda7e90310e04c94ef7ec84a93 100755 (executable)
@@ -985,6 +985,23 @@ END
 # - Email
 #
 
+=item @unique_list = unique ( @list )
+
+Filter LIST to return only unique strings.  Analogous to uniq(1) but does
+not require LIST be sorted.  Order of LIST is preserved; the first
+occurrence of each unique value is passed through.
+
+=cut
+
+sub unique {
+  my %filter;
+  my @ret;
+
+  foreach (@_) { unless ($filter{$_}) { $filter{$_}++; push @ret, $_ } }
+
+  return @ret;
+}
+
 =item @filtered = exclude_mail_blacklist ( $blacklist_file, @addresses )
 
 Filter ADDRESSES to remove addresses mentioned in BLACKLIST_FILE.
@@ -1050,7 +1067,7 @@ sub mail {
   $sender = 'ftp-upload@gnu.org'
     if ($send_to_user); # We really want replies to go to the ftp-upload queue
 
-  @email_list = exclude_mail_blacklist($email_blacklist, @email_list);
+  @email_list = unique(exclude_mail_blacklist($email_blacklist, @email_list));
 
   #print STDERR "final emails: @email_list\n";
   # return @_;