Show changes to 2 files +48 −2
Documentation/git-send-email.txt, git-send-email.perl
diff --git a/Documentation/git-send-email.txt b/Documentation/git-send-email.txt
index 7ec9dab..69e03e8 100644
--- a/Documentation/git-send-email.txt
+++ b/Documentation/git-send-email.txt
@@ -232,6 +232,23 @@ Automating
cc list. Default is the value of 'sendemail.signedoffbycc' configuration
value; if that is unspecified, default to --signed-off-by-cc.
+--suppress-to=<category>::
+ Specify an additional category of recipients to suppress the
+ auto-to of:
++
+--
+- 'author' will avoid including the patch author
+- 'self' will avoid including the sender
+- 'tocmd' will avoid running the --to-cmd
+- 'bodyto' will avoid including anyone mentioned in To lines in the
+ patch body (commit message) except for self (use 'self' for that)
+- 'all' will suppress all auto to values.
+--
++
+Default is the value of 'sendemail.suppressto' configuration value; if
+that is unspecified, default to 'self' if --suppress-from is
+specified.
+
--suppress-cc=<category>::
Specify an additional category of recipients to suppress the
auto-cc of:
diff --git a/git-send-email.perl b/git-send-email.perl
index 76565de..0365c29 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -74,6 +74,7 @@ git send-email [options] <file | directory | rev-list options >
Automating:
--identity <str> * Use the sendemail.<id> options.
--to-cmd <str> * Email To: via `<str> \$patch_path`
+ --suppress-to <str> * author, self, tocmd, bodyto, all.
--cc-cmd <str> * Email Cc: via `<str> \$patch_path`
--suppress-cc <str> * author, self, sob, cc, cccmd, body, bodycc, all.
--[no-]signed-off-by-cc * Send to Signed-off-by: addresses. Default on.
@@ -196,6 +197,7 @@ my ($smtp_server, $smtp_server_port, @smtp_server_options);
my ($smtp_authuser, $smtp_encryption);
my ($identity, $aliasfiletype, @alias_files, $smtp_domain);
my ($validate, $confirm);
+my (@suppress_to);
my (@suppress_cc);
my ($auto_8bit_encoding);
@@ -226,6 +228,7 @@ my %config_settings = (
"aliasfiletype" => \$aliasfiletype,
"bcc" => \@bcclist,
"aliasesfile" => \@alias_files,
+ "suppressto" => \@suppress_to,
"suppresscc" => \@suppress_cc,
"envelopesender" => \$envelope_sender,
"multiedit" => \$multiedit,
@@ -301,6 +304,7 @@ my $rc = GetOptions("sender|from=s" => \$sender,
"quiet" => \$quiet,
"cc-cmd=s" => \$cc_cmd,
"suppress-from!" => \$suppress_from,
+ "suppress-to=s" => \@suppress_to,
"suppress-cc=s" => \@suppress_cc,
"signed-off-cc|signed-off-by-cc!" => \$signed_off_by_cc,
"confirm=s" => \$confirm,
@@ -369,6 +373,24 @@ foreach my $setting (values %config_bool_settings) {
# 'default' encryption is none -- this only prevents a warning
$smtp_encryption = '' unless (defined $smtp_encryption);
+# Set TO suppressions
+my(%suppress_to);
+if (@suppress_to) {
+ foreach my $entry (@suppress_to) {
+ die "Unknown --suppress-to field: '$entry'\n"
+ unless $entry =~ /^(?:all|author|self|tocmd|bodyto)$/;
+ $suppress_to{$entry} = 1;
+ }
+}
+
+if ($suppress_to{'all'}) {
+ foreach my $entry (qw (author self tocmd bodyto)) {
+ $suppress_to{$entry} = 1;
+ }
+ delete $suppress_to{'all'};
+}
+$suppress_to{'self'} = $suppress_from if defined $suppress_from;
+
# Set CC suppressions
my(%suppress_cc);
if (@suppress_cc) {
@@ -407,7 +429,11 @@ die "Unknown --confirm setting: '$confirm'\n"
# Debugging, print out the suppressions.
if (0) {
- print "suppressions:\n";
+ print "To suppressions:\n";
+ foreach my $entry (keys %suppress_to) {
+ printf " %-5s -> $suppress_to{$entry}\n", $entry;
+ }
+ print "Cc suppressions:\n";
foreach my $entry (keys %suppress_cc) {
printf " %-5s -> $suppress_cc{$entry}\n", $entry;
}
@@ -1201,6 +1227,9 @@ foreach my $t (@files) {
}
elsif (/^To:\s+(.*)$/) {
foreach my $addr (parse_address_line($1)) {
+
+ next if $suppress_to{'author'};
+ next if $suppress_to{'self'} and $author eq $sender;
printf("(mbox) Adding to: %s from line '%s'\n",
$addr, $_) unless $quiet;
push @to, sanitize_address($addr);
@@ -1269,7 +1298,7 @@ foreach my $t (@files) {
close $fh;
push @to, recipients_cmd("to-cmd", "to", $to_cmd, $t)
- if defined $to_cmd;
+ if defined $to_cmd && !$suppress_to{'tocmd'};
push @cc, recipients_cmd("cc-cmd", "cc", $cc_cmd, $t)
if defined $cc_cmd && !$suppress_cc{'cccmd'};