* [PATCH v2 0/3] send-email
@ 2009-02-15 4:32 Jay Soffian
2009-02-15 4:32 ` [PATCH v2 1/3] send-email: allow send-email to run outside a repo Jay Soffian
0 siblings, 1 reply; 5+ messages in thread
From: Jay Soffian @ 2009-02-15 4:32 UTC (permalink / raw)
To: git; +Cc: Jay Soffian, Thomas Rast, Junio C Hamano
Junio,
There have been several messages on my send-email patches. I
incorporated your feedback and Thomas's contributions and re-rolled the
series.
Thomas, thank you for helping out on this series.
More information in each patch.
j.
Jay Soffian (3):
send-email: allow send-email to run outside a repo
send-email: handle multiple Cc addresses when reading mbox message
send-email: --suppress-cc improvements
Documentation/git-send-email.txt | 26 ++++--
git-send-email.perl | 183 +++++++++++++++++++++---------------
t/t9001-send-email.sh | 192 +++++++++++++++++++++++++++++++++-----
3 files changed, 294 insertions(+), 107 deletions(-)
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2 1/3] send-email: allow send-email to run outside a repo
2009-02-15 4:32 [PATCH v2 0/3] send-email Jay Soffian
@ 2009-02-15 4:32 ` Jay Soffian
2009-02-15 4:32 ` [PATCH v2 2/3] send-email: handle multiple Cc addresses when reading mbox message Jay Soffian
0 siblings, 1 reply; 5+ messages in thread
From: Jay Soffian @ 2009-02-15 4:32 UTC (permalink / raw)
To: git; +Cc: Jay Soffian, Thomas Rast, Junio C Hamano
send-email is supposed to be able to run from outside a repo. This
ability was broken by commits caf0c3d6 (make the message file name more
specific) and 5df9fcf6 (interpret unknown files as revision lists).
This commit provides a fix for both.
Signed-off-by: Jay Soffian <jaysoffian@gmail.com>
---
Junio,
I think you have this one applied already, but I don't currently in next
nor pu, so I rebased it on next. I also put it first in the series per
your request.
j.
git-send-email.perl | 13 +++++++++++--
1 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/git-send-email.perl b/git-send-email.perl
index 77ca8fe..9dad100 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -23,7 +23,7 @@ use Getopt::Long;
use Text::ParseWords;
use Data::Dumper;
use Term::ANSIColor;
-use File::Temp qw/ tempdir /;
+use File::Temp qw/ tempdir tempfile /;
use Error qw(:try);
use Git;
@@ -156,7 +156,10 @@ if ($@) {
# Behavior modification variables
my ($quiet, $dry_run) = (0, 0);
my $format_patch;
-my $compose_filename = $repo->repo_path() . "/.gitsendemail.msg.$$";
+my $compose_filename = ($repo ?
+ tempfile(".gitsendemail.msg.XXXXXX", DIR => $repo->repo_path()) :
+ tempfile(".gitsendemail.msg.XXXXXX", DIR => "."))[1];
+
# Handle interactive edition of files.
my $multiedit;
@@ -267,6 +270,9 @@ unless ($rc) {
usage();
}
+die "Cannot run git format-patch from outside a repository\n"
+ if $format_patch and not $repo;
+
# Now, let's fill any that aren't set in with defaults:
sub read_config {
@@ -404,6 +410,7 @@ if (@alias_files and $aliasfiletype and defined $parse_alias{$aliasfiletype}) {
# returns 1 if the conflict must be solved using it as a format-patch argument
sub check_file_rev_conflict($) {
+ return unless $repo;
my $f = shift;
try {
$repo->command('rev-parse', '--verify', '--quiet', $f);
@@ -445,6 +452,8 @@ while (defined(my $f = shift @ARGV)) {
}
if (@rev_list_opts) {
+ die "Cannot run git format-patch from outside a repository\n"
+ unless $repo;
push @files, $repo->command('format-patch', '-o', tempdir(CLEANUP => 1), @rev_list_opts);
}
--
1.6.2.rc0.251.g344d
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v2 2/3] send-email: handle multiple Cc addresses when reading mbox message
2009-02-15 4:32 ` [PATCH v2 1/3] send-email: allow send-email to run outside a repo Jay Soffian
@ 2009-02-15 4:32 ` Jay Soffian
2009-02-15 4:32 ` [PATCH v2 3/3] send-email: --suppress-cc improvements Jay Soffian
2009-02-15 5:07 ` [PATCH v2 2/3] send-email: handle multiple Cc addresses when reading mbox message Greg KH
0 siblings, 2 replies; 5+ messages in thread
From: Jay Soffian @ 2009-02-15 4:32 UTC (permalink / raw)
To: git; +Cc: Jay Soffian, Thomas Rast, Junio C Hamano
When git format-patch is given multiple --cc arguments, it generates a
Cc header that looks like:
Cc: first@example.com,
second@example.com,
third@example.com
Before this commit, send-email was unable to handle such a message as it
did not handle folded header lines, nor multiple recipients in a Cc
line.
This patch:
- Unfolds header lines by pre-processing the header before extracting
any of its fields.
- Handles Cc lines with multiple recipients.
- Adds use of Mail::Address if available for splitting Cc line and
the "Who should the emails be sent to?" prompt", with fall back to
existing split_addrs() function.
- Tests the new functionality and adds two tests for detecting whether
"From:" appears correctly in message body when patch author differs
from patch sender.
Signed-off-by: Jay Soffian <jaysoffian@gmail.com>
---
Changes from v1:
The original version of this messed up the logic about when to put a
"From:" in the message body. I fixed that and added two tests to make
sure it is right.
j.
git-send-email.perl | 153 +++++++++++++++++++++++++++---------------------
t/t9001-send-email.sh | 44 ++++++++++++--
2 files changed, 123 insertions(+), 74 deletions(-)
diff --git a/git-send-email.perl b/git-send-email.perl
index 9dad100..a6efd1f 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -126,6 +126,7 @@ sub format_2822_time {
}
my $have_email_valid = eval { require Email::Valid; 1 };
+my $have_mail_address = eval { require Mail::Address; 1 };
my $smtp;
my $auth;
@@ -366,6 +367,14 @@ foreach my $entry (@bcclist) {
die "Comma in --bcclist entry: $entry'\n" unless $entry !~ m/,/;
}
+sub parse_address_line {
+ if ($have_mail_address) {
+ return map { $_->format } Mail::Address->parse($_[0]);
+ } else {
+ return split_addrs($_[0]);
+ }
+}
+
sub split_addrs {
return quotewords('\s*,\s*', 1, @_);
}
@@ -602,7 +611,7 @@ if (!@to) {
}
my $to = $_;
- push @to, split_addrs($to);
+ push @to, parse_address_line($to);
$prompting++;
}
@@ -929,88 +938,98 @@ foreach my $t (@files) {
@cc = @initial_cc;
@xh = ();
my $input_format = undef;
- my $header_done = 0;
+ my @header = ();
$message = "";
+ # First unfold multiline header fields
while(<F>) {
- if (!$header_done) {
- if (/^From /) {
- $input_format = 'mbox';
- next;
+ last if /^\s*$/;
+ if (/^\s+\S/ and @header) {
+ chomp($header[$#header]);
+ s/^\s+/ /;
+ $header[$#header] .= $_;
+ } else {
+ push(@header, $_);
+ }
+ }
+ # Now parse the header
+ foreach(@header) {
+ if (/^From /) {
+ $input_format = 'mbox';
+ next;
+ }
+ chomp;
+ if (!defined $input_format && /^[-A-Za-z]+:\s/) {
+ $input_format = 'mbox';
+ }
+
+ if (defined $input_format && $input_format eq 'mbox') {
+ if (/^Subject:\s+(.*)$/) {
+ $subject = $1;
}
- chomp;
- if (!defined $input_format && /^[-A-Za-z]+:\s/) {
- $input_format = 'mbox';
+ elsif (/^From:\s+(.*)$/) {
+ ($author, $author_encoding) = unquote_rfc2047($1);
+ next if $suppress_cc{'author'};
+ next if $suppress_cc{'self'} and $author eq $sender;
+ printf("(mbox) Adding cc: %s from line '%s'\n",
+ $1, $_) unless $quiet;
+ push @cc, $1;
}
-
- if (defined $input_format && $input_format eq 'mbox') {
- if (/^Subject:\s+(.*)$/) {
- $subject = $1;
-
- } elsif (/^(Cc|From):\s+(.*)$/) {
- if (unquote_rfc2047($2) eq $sender) {
+ elsif (/^Cc:\s+(.*)$/) {
+ foreach my $addr (parse_address_line($1)) {
+ if (unquote_rfc2047($addr) eq $sender) {
next if ($suppress_cc{'self'});
- }
- elsif ($1 eq 'From') {
- ($author, $author_encoding)
- = unquote_rfc2047($2);
- next if ($suppress_cc{'author'});
} else {
next if ($suppress_cc{'cc'});
}
printf("(mbox) Adding cc: %s from line '%s'\n",
- $2, $_) unless $quiet;
- push @cc, $2;
+ $addr, $_) unless $quiet;
+ push @cc, $addr;
}
- elsif (/^Content-type:/i) {
- $has_content_type = 1;
- if (/charset="?([^ "]+)/) {
- $body_encoding = $1;
- }
- push @xh, $_;
- }
- elsif (/^Message-Id: (.*)/i) {
- $message_id = $1;
- }
- elsif (!/^Date:\s/ && /^[-A-Za-z]+:\s+\S/) {
- push @xh, $_;
- }
-
- } else {
- # In the traditional
- # "send lots of email" format,
- # line 1 = cc
- # line 2 = subject
- # So let's support that, too.
- $input_format = 'lots';
- if (@cc == 0 && !$suppress_cc{'cc'}) {
- printf("(non-mbox) Adding cc: %s from line '%s'\n",
- $_, $_) unless $quiet;
-
- push @cc, $_;
-
- } elsif (!defined $subject) {
- $subject = $_;
+ }
+ elsif (/^Content-type:/i) {
+ $has_content_type = 1;
+ if (/charset="?([^ "]+)/) {
+ $body_encoding = $1;
}
+ push @xh, $_;
}
-
- # A whitespace line will terminate the headers
- if (m/^\s*$/) {
- $header_done = 1;
+ elsif (/^Message-Id: (.*)/i) {
+ $message_id = $1;
}
+ elsif (!/^Date:\s/ && /^[-A-Za-z]+:\s+\S/) {
+ push @xh, $_;
+ }
+
} else {
- $message .= $_;
- if (/^(Signed-off-by|Cc): (.*)$/i) {
- next if ($suppress_cc{'sob'});
- chomp;
- my $c = $2;
- chomp $c;
- next if ($c eq $sender and $suppress_cc{'self'});
- push @cc, $c;
- printf("(sob) Adding cc: %s from line '%s'\n",
- $c, $_) unless $quiet;
+ # In the traditional
+ # "send lots of email" format,
+ # line 1 = cc
+ # line 2 = subject
+ # So let's support that, too.
+ $input_format = 'lots';
+ if (@cc == 0 && !$suppress_cc{'cc'}) {
+ printf("(non-mbox) Adding cc: %s from line '%s'\n",
+ $_, $_) unless $quiet;
+ push @cc, $_;
+ } elsif (!defined $subject) {
+ $subject = $_;
}
}
}
+ # Now parse the message body
+ while(<F>) {
+ $message .= $_;
+ if (/^(Signed-off-by|Cc): (.*)$/i) {
+ next if ($suppress_cc{'sob'});
+ chomp;
+ my $c = $2;
+ chomp $c;
+ next if ($c eq $sender and $suppress_cc{'self'});
+ push @cc, $c;
+ printf("(sob) Adding cc: %s from line '%s'\n",
+ $c, $_) unless $quiet;
+ }
+ }
close F;
if (defined $cc_cmd && !$suppress_cc{'cccmd'}) {
@@ -1029,7 +1048,7 @@ foreach my $t (@files) {
or die "(cc-cmd) failed to close pipe to '$cc_cmd'";
}
- if (defined $author) {
+ if (defined $author and $author ne $sender) {
$message = "From: $author\n\n$message";
if (defined $author_encoding) {
if ($has_content_type) {
diff --git a/t/t9001-send-email.sh b/t/t9001-send-email.sh
index cb3d183..63ab88b 100755
--- a/t/t9001-send-email.sh
+++ b/t/t9001-send-email.sh
@@ -32,7 +32,7 @@ clean_fake_sendmail() {
}
test_expect_success 'Extract patches' '
- patches=`git format-patch -n HEAD^1`
+ patches=`git format-patch --cc="One <one@example.com>" --cc=two@example.com -n HEAD^1`
'
test_expect_success 'Send patches' '
@@ -42,6 +42,8 @@ test_expect_success 'Send patches' '
cat >expected <<\EOF
!nobody@example.com!
!author@example.com!
+!one@example.com!
+!two@example.com!
EOF
test_expect_success \
'Verify commandline' \
@@ -50,13 +52,15 @@ test_expect_success \
cat >expected-show-all-headers <<\EOF
0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
+(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
+(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
Dry-OK. Log says:
Server: relay.example.com
MAIL FROM:<from@example.com>
-RCPT TO:<to@example.com>,<cc@example.com>,<author@example.com>,<bcc@example.com>
+RCPT TO:<to@example.com>,<cc@example.com>,<author@example.com>,<one@example.com>,<two@example.com>,<bcc@example.com>
From: Example <from@example.com>
To: to@example.com
-Cc: cc@example.com, A <author@example.com>
+Cc: cc@example.com, A <author@example.com>, One <one@example.com>, two@example.com
Subject: [PATCH 1/1] Second.
Date: DATE-STRING
Message-Id: MESSAGE-ID-STRING
@@ -104,6 +108,28 @@ test_expect_success 'no patch was sent' '
! test -e commandline1
'
+test_expect_success 'Author From: in message body' '
+ clean_fake_sendmail &&
+ git send-email \
+ --from="Example <nobody@example.com>" \
+ --to=nobody@example.com \
+ --smtp-server="$(pwd)/fake.sendmail" \
+ $patches &&
+ sed "1,/^$/d" < msgtxt1 > msgbody1
+ grep "From: A <author@example.com>" msgbody1
+'
+
+test_expect_success 'Author From: not in message body' '
+ clean_fake_sendmail &&
+ git send-email \
+ --from="A <author@example.com>" \
+ --to=nobody@example.com \
+ --smtp-server="$(pwd)/fake.sendmail" \
+ $patches &&
+ sed "1,/^$/d" < msgtxt1 > msgbody1
+ ! grep "From: A <author@example.com>" msgbody1
+'
+
test_expect_success 'allow long lines with --no-validate' '
git send-email \
--from="Example <nobody@example.com>" \
@@ -170,13 +196,15 @@ test_expect_success 'second message is patch' '
cat >expected-show-all-headers <<\EOF
0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
+(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
+(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
Dry-OK. Log says:
Server: relay.example.com
MAIL FROM:<from@example.com>
-RCPT TO:<to@example.com>,<cc@example.com>,<author@example.com>
+RCPT TO:<to@example.com>,<cc@example.com>,<author@example.com>,<one@example.com>,<two@example.com>
From: Example <from@example.com>
To: to@example.com
-Cc: cc@example.com, A <author@example.com>
+Cc: cc@example.com, A <author@example.com>, One <one@example.com>, two@example.com
Subject: [PATCH 1/1] Second.
Date: DATE-STRING
Message-Id: MESSAGE-ID-STRING
@@ -203,13 +231,15 @@ test_expect_success 'sendemail.cc set' '
cat >expected-show-all-headers <<\EOF
0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
+(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
+(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
Dry-OK. Log says:
Server: relay.example.com
MAIL FROM:<from@example.com>
-RCPT TO:<to@example.com>,<author@example.com>
+RCPT TO:<to@example.com>,<author@example.com>,<one@example.com>,<two@example.com>
From: Example <from@example.com>
To: to@example.com
-Cc: A <author@example.com>
+Cc: A <author@example.com>, One <one@example.com>, two@example.com
Subject: [PATCH 1/1] Second.
Date: DATE-STRING
Message-Id: MESSAGE-ID-STRING
--
1.6.2.rc0.251.g344d
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v2 3/3] send-email: --suppress-cc improvements
2009-02-15 4:32 ` [PATCH v2 2/3] send-email: handle multiple Cc addresses when reading mbox message Jay Soffian
@ 2009-02-15 4:32 ` Jay Soffian
2009-02-15 5:07 ` [PATCH v2 2/3] send-email: handle multiple Cc addresses when reading mbox message Greg KH
1 sibling, 0 replies; 5+ messages in thread
From: Jay Soffian @ 2009-02-15 4:32 UTC (permalink / raw)
To: git; +Cc: Jay Soffian, Thomas Rast, Junio C Hamano
Since 6564828 (git-send-email: Generalize auto-cc recipient
mechanism., 2007-12-25) we can suppress automatic Cc generation
separately for each of the possible address sources. However,
--suppress-cc=sob suppressed both SOB lines and body (but not header)
Cc lines, contrary to the name.
Change --suppress-cc=sob to mean only SOB lines, and add separate
choices 'bodycc' (body Cc lines) and 'body' (both 'sob' and 'bodycc').
The option --no-signed-off-by-cc now acts like --suppress-cc=sob,
which is not backwards compatible but matches the name of the option.
Also update the documentation and add a few tests.
Original patch by me. Revised by Thomas Rast, who contributed the
documentation and test updates.
Signed-off-by: Jay Soffian <jaysoffian@gmail.com>
---
Changes from v1:
I incorporated Thomas's changes, which were per your suggestions.
Thomas, thank you for the contribution.
I also agreed that self is special, and --suppress-cc=cc should keep
self in a header Cc. The user can always use --suppress-cc=self in
addition to --suppress-cc=cc if they want. For consistency, I made
--suppress-cc={ccbody,sob} keep self as well. I updated the
documentation to clarify this.
j.
Documentation/git-send-email.txt | 27 +++++--
git-send-email.perl | 28 +++++--
t/t9001-send-email.sh | 150 +++++++++++++++++++++++++++++++++-----
3 files changed, 169 insertions(+), 36 deletions(-)
diff --git a/Documentation/git-send-email.txt b/Documentation/git-send-email.txt
index ff4aeff..164d149 100644
--- a/Documentation/git-send-email.txt
+++ b/Documentation/git-send-email.txt
@@ -164,14 +164,25 @@ Automating
--suppress-cc::
Specify an additional category of recipients to suppress the
- auto-cc of. 'self' will avoid including the sender, 'author' will
- avoid including the patch author, 'cc' will avoid including anyone
- mentioned in Cc lines in the patch, 'sob' will avoid including
- anyone mentioned in Signed-off-by lines, and 'cccmd' will avoid
- running the --cc-cmd. 'all' will suppress all auto cc values.
- Default is the value of 'sendemail.suppresscc' configuration value;
- if that is unspecified, default to 'self' if --suppress-from is
- specified, as well as 'sob' if --no-signed-off-cc is specified.
+ auto-cc of:
++
+--
+- 'author' will avoid including the patch author
+- 'self' will avoid including the sender
+- 'cc' will avoid including anyone mentioned in Cc lines in the patch header
+ except for self (use 'self' for that).
+- 'ccbody' will avoid including anyone mentioned in Cc lines in the
+ patch body (commit message) except for self (use 'self' for that).
+- 'sob' will avoid including anyone mentioned in Signed-off-by lines except
+ for self (use 'self' for that).
+- 'cccmd' will avoid running the --cc-cmd.
+- 'body' is equivalent to 'sob' + 'ccbody'
+- 'all' will suppress all auto cc values.
+--
++
+Default is the value of 'sendemail.suppresscc' configuration value; if
+that is unspecified, default to 'self' if --suppress-from is
+specified, as well as 'body' if --no-signed-off-cc is specified.
--[no-]suppress-from::
If this is set, do not add the From: address to the cc: list.
diff --git a/git-send-email.perl b/git-send-email.perl
index a6efd1f..54e7617 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -68,9 +68,8 @@ git send-email [options] <file | directory | rev-list options >
Automating:
--identity <str> * Use the sendemail.<id> options.
--cc-cmd <str> * Email Cc: via `<str> \$patch_path`
- --suppress-cc <str> * author, self, sob, cccmd, all.
- --[no-]signed-off-by-cc * Send to Cc: and Signed-off-by:
- addresses. Default on.
+ --suppress-cc <str> * author, self, sob, cc, cccmd, body, bodycc, all.
+ --[no-]signed-off-by-cc * Send to Signed-off-by: addresses. Default on.
--[no-]suppress-from * Send to self. Default off.
--[no-]chain-reply-to * Chain In-Reply-To: fields. Default on.
--[no-]thread * Use In-Reply-To: field. Default on.
@@ -325,13 +324,13 @@ my(%suppress_cc);
if (@suppress_cc) {
foreach my $entry (@suppress_cc) {
die "Unknown --suppress-cc field: '$entry'\n"
- unless $entry =~ /^(all|cccmd|cc|author|self|sob)$/;
+ unless $entry =~ /^(all|cccmd|cc|author|self|sob|body|bodycc)$/;
$suppress_cc{$entry} = 1;
}
}
if ($suppress_cc{'all'}) {
- foreach my $entry (qw (ccmd cc author self sob)) {
+ foreach my $entry (qw (ccmd cc author self sob body bodycc)) {
$suppress_cc{$entry} = 1;
}
delete $suppress_cc{'all'};
@@ -341,6 +340,13 @@ if ($suppress_cc{'all'}) {
$suppress_cc{'self'} = $suppress_from if defined $suppress_from;
$suppress_cc{'sob'} = !$signed_off_by_cc if defined $signed_off_by_cc;
+if ($suppress_cc{'body'}) {
+ foreach my $entry (qw (sob bodycc)) {
+ $suppress_cc{$entry} = 1;
+ }
+ delete $suppress_cc{'body'};
+}
+
# Debugging, print out the suppressions.
if (0) {
print "suppressions:\n";
@@ -1020,13 +1026,17 @@ foreach my $t (@files) {
while(<F>) {
$message .= $_;
if (/^(Signed-off-by|Cc): (.*)$/i) {
- next if ($suppress_cc{'sob'});
chomp;
- my $c = $2;
+ my ($what, $c) = ($1, $2);
chomp $c;
- next if ($c eq $sender and $suppress_cc{'self'});
+ if ($c eq $sender) {
+ next if ($suppress_cc{'self'});
+ } else {
+ next if $suppress_cc{'sob'} and $what =~ /Signed-off-by/i;
+ next if $suppress_cc{'bodycc'} and $what =~ /Cc/i;
+ }
push @cc, $c;
- printf("(sob) Adding cc: %s from line '%s'\n",
+ printf("(body) Adding cc: %s from line '%s'\n",
$c, $_) unless $quiet;
}
}
diff --git a/t/t9001-send-email.sh b/t/t9001-send-email.sh
index 63ab88b..4df4f96 100755
--- a/t/t9001-send-email.sh
+++ b/t/t9001-send-email.sh
@@ -32,11 +32,11 @@ clean_fake_sendmail() {
}
test_expect_success 'Extract patches' '
- patches=`git format-patch --cc="One <one@example.com>" --cc=two@example.com -n HEAD^1`
+ patches=`git format-patch -s --cc="One <one@example.com>" --cc=two@example.com -n HEAD^1`
'
test_expect_success 'Send patches' '
- git send-email --from="Example <nobody@example.com>" --to=nobody@example.com --smtp-server="$(pwd)/fake.sendmail" $patches 2>errors
+ git send-email --suppress-cc=sob --from="Example <nobody@example.com>" --to=nobody@example.com --smtp-server="$(pwd)/fake.sendmail" $patches 2>errors
'
cat >expected <<\EOF
@@ -74,6 +74,7 @@ EOF
test_expect_success 'Show all headers' '
git send-email \
--dry-run \
+ --suppress-cc=sob \
--from="Example <from@example.com>" \
--to=to@example.com \
--cc=cc@example.com \
@@ -193,7 +194,7 @@ test_expect_success 'second message is patch' '
grep "Subject:.*Second" msgtxt2
'
-cat >expected-show-all-headers <<\EOF
+cat >expected-suppress-sob <<\EOF
0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
@@ -213,10 +214,10 @@ X-Mailer: X-MAILER-STRING
Result: OK
EOF
-test_expect_success 'sendemail.cc set' '
- git config sendemail.cc cc@example.com &&
+test_suppression () {
git send-email \
--dry-run \
+ --suppress-cc=$1 \
--from="Example <from@example.com>" \
--to=to@example.com \
--smtp-server relay.example.com \
@@ -224,11 +225,16 @@ test_expect_success 'sendemail.cc set' '
sed -e "s/^\(Date:\).*/\1 DATE-STRING/" \
-e "s/^\(Message-Id:\).*/\1 MESSAGE-ID-STRING/" \
-e "s/^\(X-Mailer:\).*/\1 X-MAILER-STRING/" \
- >actual-show-all-headers &&
- test_cmp expected-show-all-headers actual-show-all-headers
+ >actual-suppress-$1 &&
+ test_cmp expected-suppress-$1 actual-suppress-$1
+}
+
+test_expect_success 'sendemail.cc set' '
+ git config sendemail.cc cc@example.com &&
+ test_suppression sob
'
-cat >expected-show-all-headers <<\EOF
+cat >expected-suppress-sob <<\EOF
0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
@@ -250,17 +256,123 @@ EOF
test_expect_success 'sendemail.cc unset' '
git config --unset sendemail.cc &&
- git send-email \
- --dry-run \
- --from="Example <from@example.com>" \
- --to=to@example.com \
- --smtp-server relay.example.com \
- $patches |
- sed -e "s/^\(Date:\).*/\1 DATE-STRING/" \
- -e "s/^\(Message-Id:\).*/\1 MESSAGE-ID-STRING/" \
- -e "s/^\(X-Mailer:\).*/\1 X-MAILER-STRING/" \
- >actual-show-all-headers &&
- test_cmp expected-show-all-headers actual-show-all-headers
+ test_suppression sob
+'
+
+cat >expected-suppress-all <<\EOF
+0001-Second.patch
+Dry-OK. Log says:
+Server: relay.example.com
+MAIL FROM:<from@example.com>
+RCPT TO:<to@example.com>
+From: Example <from@example.com>
+To: to@example.com
+Subject: [PATCH 1/1] Second.
+Date: DATE-STRING
+Message-Id: MESSAGE-ID-STRING
+X-Mailer: X-MAILER-STRING
+
+Result: OK
+EOF
+
+test_expect_success '--suppress-cc=all' '
+ test_suppression all
+'
+
+cat >expected-suppress-body <<\EOF
+0001-Second.patch
+(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
+(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
+(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
+Dry-OK. Log says:
+Server: relay.example.com
+MAIL FROM:<from@example.com>
+RCPT TO:<to@example.com>,<author@example.com>,<one@example.com>,<two@example.com>
+From: Example <from@example.com>
+To: to@example.com
+Cc: A <author@example.com>, One <one@example.com>, two@example.com
+Subject: [PATCH 1/1] Second.
+Date: DATE-STRING
+Message-Id: MESSAGE-ID-STRING
+X-Mailer: X-MAILER-STRING
+
+Result: OK
+EOF
+
+test_expect_success '--suppress-cc=body' '
+ test_suppression body
+'
+
+cat >expected-suppress-sob <<\EOF
+0001-Second.patch
+(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
+(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
+(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
+Dry-OK. Log says:
+Server: relay.example.com
+MAIL FROM:<from@example.com>
+RCPT TO:<to@example.com>,<author@example.com>,<one@example.com>,<two@example.com>
+From: Example <from@example.com>
+To: to@example.com
+Cc: A <author@example.com>, One <one@example.com>, two@example.com
+Subject: [PATCH 1/1] Second.
+Date: DATE-STRING
+Message-Id: MESSAGE-ID-STRING
+X-Mailer: X-MAILER-STRING
+
+Result: OK
+EOF
+
+test_expect_success '--suppress-cc=sob' '
+ test_suppression sob
+'
+
+cat >expected-suppress-bodycc <<\EOF
+0001-Second.patch
+(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
+(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
+(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
+(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
+Dry-OK. Log says:
+Server: relay.example.com
+MAIL FROM:<from@example.com>
+RCPT TO:<to@example.com>,<author@example.com>,<one@example.com>,<two@example.com>,<committer@example.com>
+From: Example <from@example.com>
+To: to@example.com
+Cc: A <author@example.com>, One <one@example.com>, two@example.com, C O Mitter <committer@example.com>
+Subject: [PATCH 1/1] Second.
+Date: DATE-STRING
+Message-Id: MESSAGE-ID-STRING
+X-Mailer: X-MAILER-STRING
+
+Result: OK
+EOF
+
+test_expect_success '--suppress-cc=bodycc' '
+ test_suppression bodycc
+'
+
+cat >expected-suppress-cc <<\EOF
+0001-Second.patch
+(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
+(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
+Dry-OK. Log says:
+Server: relay.example.com
+MAIL FROM:<from@example.com>
+RCPT TO:<to@example.com>,<author@example.com>,<committer@example.com>
+From: Example <from@example.com>
+To: to@example.com
+Cc: A <author@example.com>, C O Mitter <committer@example.com>
+Subject: [PATCH 1/1] Second.
+Date: DATE-STRING
+Message-Id: MESSAGE-ID-STRING
+X-Mailer: X-MAILER-STRING
+
+Result: OK
+EOF
+
+test_expect_success '--suppress-cc=cc' '
+ test_suppression cc
'
test_expect_success '--compose adds MIME for utf8 body' '
--
1.6.2.rc0.251.g344d
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2 2/3] send-email: handle multiple Cc addresses when reading mbox message
2009-02-15 4:32 ` [PATCH v2 2/3] send-email: handle multiple Cc addresses when reading mbox message Jay Soffian
2009-02-15 4:32 ` [PATCH v2 3/3] send-email: --suppress-cc improvements Jay Soffian
@ 2009-02-15 5:07 ` Greg KH
1 sibling, 0 replies; 5+ messages in thread
From: Greg KH @ 2009-02-15 5:07 UTC (permalink / raw)
To: Jay Soffian; +Cc: git, Thomas Rast, Junio C Hamano
On Sat, Feb 14, 2009 at 11:32:14PM -0500, Jay Soffian wrote:
> When git format-patch is given multiple --cc arguments, it generates a
> Cc header that looks like:
>
> Cc: first@example.com,
> second@example.com,
> third@example.com
>
> Before this commit, send-email was unable to handle such a message as it
> did not handle folded header lines, nor multiple recipients in a Cc
> line.
>
> This patch:
>
> - Unfolds header lines by pre-processing the header before extracting
> any of its fields.
>
> - Handles Cc lines with multiple recipients.
>
> - Adds use of Mail::Address if available for splitting Cc line and
> the "Who should the emails be sent to?" prompt", with fall back to
> existing split_addrs() function.
YES!!!
I was just trying to fix this in the latest version, as it couldn't
handle mbox files well at all (vger.kernel.org spit the output back at
me quite nastily when I tried it.)
Thanks for these fixes, I personally really appreciate it, and need
them.
greg k-h
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2009-02-15 5:25 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-02-15 4:32 [PATCH v2 0/3] send-email Jay Soffian
2009-02-15 4:32 ` [PATCH v2 1/3] send-email: allow send-email to run outside a repo Jay Soffian
2009-02-15 4:32 ` [PATCH v2 2/3] send-email: handle multiple Cc addresses when reading mbox message Jay Soffian
2009-02-15 4:32 ` [PATCH v2 3/3] send-email: --suppress-cc improvements Jay Soffian
2009-02-15 5:07 ` [PATCH v2 2/3] send-email: handle multiple Cc addresses when reading mbox message Greg KH
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.