send-email: add --no-cc, --no-to, and --no-bcc

There's no way to override the sendemail.to, sendemail.cc, and
sendemail.bcc config settings. Add options allowing the user to tell
git to ignore the config settings and take whatever is on the command
line.

Signed-off-by: Stephen Boyd <bebarino@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Stephen Boyd 2010-03-07 14:46:48 -08:00 committed by Junio C Hamano
parent c42600346b
commit f434c083a0
2 changed files with 76 additions and 4 deletions

View file

@ -47,9 +47,9 @@ sub usage {
Composing: Composing:
--from <str> * Email From: --from <str> * Email From:
--to <str> * Email To: --[no-]to <str> * Email To:
--cc <str> * Email Cc: --[no-]cc <str> * Email Cc:
--bcc <str> * Email Bcc: --[no-]bcc <str> * Email Bcc:
--subject <str> * Email "Subject:" --subject <str> * Email "Subject:"
--in-reply-to <str> * Email "In-Reply-To:" --in-reply-to <str> * Email "In-Reply-To:"
--annotate * Review each patch that will be sent in an editor. --annotate * Review each patch that will be sent in an editor.
@ -135,7 +135,7 @@ sub format_2822_time {
sub cleanup_compose_files(); sub cleanup_compose_files();
# Variables we fill in automatically, or via prompting: # Variables we fill in automatically, or via prompting:
my (@to,@cc,@initial_cc,@bcclist,@xh, my (@to,$no_to,@cc,$no_cc,@initial_cc,@bcclist,$no_bcc,@xh,
$initial_reply_to,$initial_subject,@files, $initial_reply_to,$initial_subject,@files,
$author,$sender,$smtp_authpass,$annotate,$compose,$time); $author,$sender,$smtp_authpass,$annotate,$compose,$time);
@ -261,8 +261,11 @@ sub signal_handler {
"in-reply-to=s" => \$initial_reply_to, "in-reply-to=s" => \$initial_reply_to,
"subject=s" => \$initial_subject, "subject=s" => \$initial_subject,
"to=s" => \@to, "to=s" => \@to,
"no-to" => \$no_to,
"cc=s" => \@initial_cc, "cc=s" => \@initial_cc,
"no-cc" => \$no_cc,
"bcc=s" => \@bcclist, "bcc=s" => \@bcclist,
"no-bcc" => \$no_bcc,
"chain-reply-to!" => \$chain_reply_to, "chain-reply-to!" => \$chain_reply_to,
"smtp-server=s" => \$smtp_server, "smtp-server=s" => \$smtp_server,
"smtp-server-port=s" => \$smtp_server_port, "smtp-server-port=s" => \$smtp_server_port,
@ -305,6 +308,9 @@ sub read_config {
foreach my $setting (keys %config_settings) { foreach my $setting (keys %config_settings) {
my $target = $config_settings{$setting}; my $target = $config_settings{$setting};
next if $setting eq "to" and defined $no_to;
next if $setting eq "cc" and defined $no_cc;
next if $setting eq "bcc" and defined $no_bcc;
if (ref($target) eq "ARRAY") { if (ref($target) eq "ARRAY") {
unless (@$target) { unless (@$target) {
my @values = Git::config(@repo, "$prefix.$setting"); my @values = Git::config(@repo, "$prefix.$setting");

View file

@ -852,4 +852,70 @@ test_expect_success 'no warning with sendemail.chainreplyto = true' '
! grep "no-chain-reply-to" errors ! grep "no-chain-reply-to" errors
' '
test_expect_success 'sendemail.to works' '
git config --replace-all sendemail.to "Somebody <somebody@ex.com>" &&
git send-email \
--dry-run \
--from="Example <nobody@example.com>" \
$patches $patches >stdout &&
grep "To: Somebody <somebody@ex.com>" stdout
'
test_expect_success '--no-to overrides sendemail.to' '
git send-email \
--dry-run \
--from="Example <nobody@example.com>" \
--no-to \
--to=nobody@example.com \
$patches $patches >stdout &&
grep "To: nobody@example.com" stdout &&
! grep "To: Somebody <somebody@ex.com>" stdout
'
test_expect_success 'sendemail.cc works' '
git config --replace-all sendemail.cc "Somebody <somebody@ex.com>" &&
git send-email \
--dry-run \
--from="Example <nobody@example.com>" \
--to=nobody@example.com \
$patches $patches >stdout &&
grep "Cc: Somebody <somebody@ex.com>" stdout
'
test_expect_success '--no-cc overrides sendemail.cc' '
git send-email \
--dry-run \
--from="Example <nobody@example.com>" \
--no-cc \
--cc=bodies@example.com \
--to=nobody@example.com \
$patches $patches >stdout &&
grep "Cc: bodies@example.com" stdout &&
! grep "Cc: Somebody <somebody@ex.com>" stdout
'
test_expect_success 'sendemail.bcc works' '
git config --replace-all sendemail.bcc "Other <other@ex.com>" &&
git send-email \
--dry-run \
--from="Example <nobody@example.com>" \
--to=nobody@example.com \
--smtp-server relay.example.com \
$patches $patches >stdout &&
grep "RCPT TO:<other@ex.com>" stdout
'
test_expect_success '--no-bcc overrides sendemail.bcc' '
git send-email \
--dry-run \
--from="Example <nobody@example.com>" \
--no-bcc \
--bcc=bodies@example.com \
--to=nobody@example.com \
--smtp-server relay.example.com \
$patches $patches >stdout &&
grep "RCPT TO:<bodies@example.com>" stdout &&
! grep "RCPT TO:<other@ex.com>" stdout
'
test_done test_done