Skip to content

Commit

Permalink
git send-email: add --annotate option
Browse files Browse the repository at this point in the history
This allows to review every patch (and fix various aspects of them, or
comment them) in an editor just before being sent. Combined to the fact
that git send-email can now process revision lists, this makes git
send-email and efficient way to review and send patches interactively.

Signed-off-by: Pierre Habouzit <madcoder@debian.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Pierre Habouzit authored and Junio C Hamano committed Nov 12, 2008
1 parent 5df9fcf commit 8fd5bb7
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 2 deletions.
11 changes: 11 additions & 0 deletions Documentation/git-send-email.txt
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,11 @@ The --bcc option must be repeated for each user you want on the bcc list.
+
The --cc option must be repeated for each user you want on the cc list.

--annotate::
Review each patch you're about to send in an editor. The setting
'sendemail.multiedit' defines if this will spawn one editor per patch
or one for all of them at once.

--compose::
Use $GIT_EDITOR, core.editor, $VISUAL, or $EDITOR to edit an
introductory message for the patch series.
Expand Down Expand Up @@ -210,6 +215,12 @@ sendemail.aliasfiletype::
Format of the file(s) specified in sendemail.aliasesfile. Must be
one of 'mutt', 'mailrc', 'pine', or 'gnus'.

sendemail.multiedit::
If true (default), a single editor instance will be spawned to edit
files you have to edit (patches when '--annotate' is used, and the
summary when '--compose' is used). If false, files will be edited one
after the other, spawning a new editor each time.


Author
------
Expand Down
26 changes: 24 additions & 2 deletions git-send-email.perl
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ sub usage {
--bcc <str> * Email Bcc:
--subject <str> * Email "Subject:"
--in-reply-to <str> * Email "In-Reply-To:"
--annotate * Review each patch that will be sent in an editor.
--compose * Open an editor for introduction.
Sending:
Expand Down Expand Up @@ -132,7 +133,8 @@ sub format_2822_time {

# Variables we fill in automatically, or via prompting:
my (@to,@cc,@initial_cc,@bcclist,@xh,
$initial_reply_to,$initial_subject,@files,$author,$sender,$smtp_authpass,$compose,$time);
$initial_reply_to,$initial_subject,@files,
$author,$sender,$smtp_authpass,$annotate,$compose,$time);

my $envelope_sender;

Expand All @@ -155,6 +157,17 @@ sub format_2822_time {
my $format_patch;
my $compose_filename = $repo->repo_path() . "/.gitsendemail.msg.$$";

# Handle interactive edition of files.
my $multiedit;
my $editor = $ENV{GIT_EDITOR} || Git::config(@repo, "core.editor") || $ENV{VISUAL} || $ENV{EDITOR} || "vi";
sub do_edit {
if (defined($multiedit) && !$multiedit) {
map { system('sh', '-c', $editor.' "$@"', $editor, $_); } @_;
} else {
system('sh', '-c', $editor.' "$@"', $editor, @_);
}
}

# Variables with corresponding config settings
my ($thread, $chain_reply_to, $suppress_from, $signed_off_by_cc, $cc_cmd);
my ($smtp_server, $smtp_server_port, $smtp_authuser, $smtp_encryption);
Expand Down Expand Up @@ -184,6 +197,7 @@ sub format_2822_time {
"aliasesfile" => \@alias_files,
"suppresscc" => \@suppress_cc,
"envelopesender" => \$envelope_sender,
"multiedit" => \$multiedit,
);

# Handle Uncouth Termination
Expand Down Expand Up @@ -226,6 +240,7 @@ sub signal_handler {
"smtp-ssl" => sub { $smtp_encryption = 'ssl' },
"smtp-encryption=s" => \$smtp_encryption,
"identity=s" => \$identity,
"annotate" => \$annotate,
"compose" => \$compose,
"quiet" => \$quiet,
"cc-cmd=s" => \$cc_cmd,
Expand Down Expand Up @@ -532,7 +547,12 @@ sub expand_aliases {
close(C);

my $editor = $ENV{GIT_EDITOR} || Git::config(@repo, "core.editor") || $ENV{VISUAL} || $ENV{EDITOR} || "vi";
system('sh', '-c', $editor.' "$@"', $editor, $compose_filename);

if ($annotate) {
do_edit($compose_filename, @files);
} else {
do_edit($compose_filename);
}

open(C2,">",$compose_filename . ".final")
or die "Failed to open $compose_filename.final : " . $!;
Expand Down Expand Up @@ -581,6 +601,8 @@ sub expand_aliases {
}

@files = ($compose_filename . ".final", @files);
} elsif ($annotate) {
do_edit(@files);
}

# Variables we set as part of the loop over files
Expand Down

0 comments on commit 8fd5bb7

Please sign in to comment.