git send-email: add --annotate option
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>
This commit is contained in:
parent
5df9fcf695
commit
8fd5bb7f44
@ -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.
|
||||
@ -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
|
||||
------
|
||||
|
@ -51,6 +51,7 @@ git send-email [options] <file | directory | rev-list options >
|
||||
--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:
|
||||
@ -132,7 +133,8 @@ sub cleanup_compose_files();
|
||||
|
||||
# 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;
|
||||
|
||||
@ -155,6 +157,17 @@ my ($quiet, $dry_run) = (0, 0);
|
||||
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);
|
||||
@ -184,6 +197,7 @@ my %config_settings = (
|
||||
"aliasesfile" => \@alias_files,
|
||||
"suppresscc" => \@suppress_cc,
|
||||
"envelopesender" => \$envelope_sender,
|
||||
"multiedit" => \$multiedit,
|
||||
);
|
||||
|
||||
# Handle Uncouth Termination
|
||||
@ -226,6 +240,7 @@ my $rc = GetOptions("sender|from=s" => \$sender,
|
||||
"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,
|
||||
@ -532,7 +547,12 @@ EOT
|
||||
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 : " . $!;
|
||||
@ -581,6 +601,8 @@ EOT
|
||||
}
|
||||
|
||||
@files = ($compose_filename . ".final", @files);
|
||||
} elsif ($annotate) {
|
||||
do_edit(@files);
|
||||
}
|
||||
|
||||
# Variables we set as part of the loop over files
|
||||
|
Loading…
Reference in New Issue
Block a user