Subject: [PATCH] git-send-email: add option to force a From: line within the message body

From: [email-masked]
Date: Mon, 3 Mar 2008 00:00:43 -0600

From: Brandon Casey <[email-masked]>

Add a new command line option --add-author-from and a config option
sendemail.addauthorfrom which will ensure that a From: line is added
to the message body regardless of whether the sender email matches the
From: line parsed from the supplied patch (i.e. the patch author).

This provides a work-around for mail gateways which override the From:
line of submitted messages.

Signed-off-by: Brandon Casey <[email-masked]>
---

I don't know if anyone else has the same problem, but I sometimes use a
mail gateway which forces a certain From: line overriding what is
supplied in the email. So, for me, the solution this patch provides could
be achieved by just typing in some bogus string when git-send-email prompts
for the From address, but this patch is more convenient and more general.

-brandon

 Documentation/git-send-email.txt |    9 +++++++++
 git-send-email.perl              |   12 ++++++++++++
 2 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/Documentation/git-send-email.txt b/Documentation/git-send-email.txt
index 336d797..e3267de 100644
--- a/Documentation/git-send-email.txt
+++ b/Documentation/git-send-email.txt
@@ -157,6 +157,11 @@ user is prompted for a password while the input is masked for privacy.
 	if that is unspecified, default to 'self' if --suppress-from is
 	specified, as well as 'sob' if --no-signed-off-cc is specified.
 
+--add-author-from::
+	Add a "From:" line within the message body describing the patch
+	author even if the author is equal to the sender. Usually, a "From:"
+	line is added only when the author differs from the sender.
+
 --thread, --no-thread::
 	If this is set, the In-Reply-To header will be set on each email sent.
 	If disabled with "--no-thread", no emails will have the In-Reply-To
@@ -225,6 +230,10 @@ sendemail.smtppass::
 sendemail.smtpssl::
 	Boolean value specifying the default to the '--smtp-ssl' parameter.
 
+sendemail.addauthorfrom::
+	Boolean value specifying the default to the '--add-author-from'
+	parameter.
+
 Author
 ------
 Written by Ryan Anderson <[email-masked]>
diff --git a/git-send-email.perl b/git-send-email.perl
index 29b1105..4d0aaac 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -94,6 +94,9 @@ Options:
 
    --suppress-from Suppress sending emails to yourself. Defaults to off.
 
+   --add-author-from Add "From:" line within message body for patch author
+                  even when author is equal to sender.
+
    --thread       Specify that the "In-Reply-To:" header should be set on all
                   emails. Defaults to on.
 
@@ -187,6 +190,7 @@ my ($smtp_server, $smtp_server_port, $smtp_authuser, $smtp_ssl);
 my ($identity, $aliasfiletype, @alias_files, @smtp_host_parts);
 my ($no_validate);
 my (@suppress_cc);
+my ($force_author_from);
 
 my %config_bool_settings = (
     "thread" => [\$thread, 1],
@@ -194,6 +198,7 @@ my %config_bool_settings = (
     "suppressfrom" => [\$suppress_from, undef],
     "signedoffcc" => [\$signed_off_cc, undef],
     "smtpssl" => [\$smtp_ssl, 0],
+    "addauthorfrom" => [\$force_author_from, 0],
 );
 
 my %config_settings = (
@@ -252,6 +257,7 @@ my $rc = GetOptions("sender|from=s" => \$sender,
 		    "quiet" => \$quiet,
 		    "cc-cmd=s" => \$cc_cmd,
 		    "suppress-from!" => \$suppress_from,
+		    "add-author-from!" => \$force_author_from,
 		    "suppress-cc=s" => \@suppress_cc,
 		    "signed-off-cc|signed-off-by-cc!" => \$signed_off_cc,
 		    "dry-run" => \$dry_run,
@@ -802,6 +808,12 @@ foreach my $t (@files) {
 
 				} elsif (/^(Cc|From):\s+(.*)$/) {
 					if (unquote_rfc2047($2) eq $sender) {
+						if ($force_author_from &&
+						    $1 eq 'From') {
+							($author,
+							 $author_encoding) =
+							unquote_rfc2047($2)
+						}
 						next if ($suppress_cc{'self'});
 					}
 					elsif ($1 eq 'From') {
-- 
1.5.4.3.472.gdf7d.dirty