When sending a patch series, the emails often arrive at the final destination out of order; though these emails should be chained via the In-Reply-To headers, some mail-viewing systems display by order of arrival instead. The --delay option provides a means for specifying that there should be a certain number of seconds of delay between sending emails, so that the arrival order can be controlled better. Signed-off-by: Michael Witten <mfwitten@xxxxxxxxx> --- Documentation/git-send-email.txt | 5 +++++ git-send-email.perl | 17 +++++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/Documentation/git-send-email.txt b/Documentation/git-send-email.txt index 10dfd66..4b656ca 100644 --- a/Documentation/git-send-email.txt +++ b/Documentation/git-send-email.txt @@ -97,6 +97,11 @@ The --to option must be repeated for each user you want on the to list. Sending ~~~~~~~ +--delay:: + Specify the minimum number of seconds of delay that should occur + between sending emails. This number should be an integer >= zero. + Default is the value of the 'sendemail.delay' configuration variable. + --envelope-sender:: Specify the envelope sender used to send the emails. This is useful if your default address is not the address that is diff --git a/git-send-email.perl b/git-send-email.perl index 172b53c..273c8c7 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -56,6 +56,7 @@ git send-email [options] <file | directory | rev-list options > --compose * Open an editor for introduction. Sending: + --delay <int> * Delay (seconds) between sending emails. --envelope-sender <str> * Email envelope sender. --smtp-server <str:int> * Outgoing SMTP server to use. The port is optional. Default 'localhost'. @@ -180,7 +181,7 @@ sub do_edit { } # Variables with corresponding config settings -my ($thread, $chain_reply_to, $suppress_from, $signed_off_by_cc, $cc_cmd); +my ($delay, $thread, $chain_reply_to, $suppress_from, $signed_off_by_cc, $cc_cmd); my ($smtp_server, $smtp_server_port, $smtp_authuser, $smtp_encryption); my ($identity, $aliasfiletype, @alias_files, @smtp_host_parts); my ($validate, $confirm); @@ -196,6 +197,7 @@ my %config_bool_settings = ( ); my %config_settings = ( + "delay" => \$delay, "smtpserver" => \$smtp_server, "smtpserverport" => \$smtp_server_port, "smtpuser" => \$smtp_authuser, @@ -247,6 +249,7 @@ my $rc = GetOptions("sender|from=s" => \$sender, "cc=s" => \@initial_cc, "bcc=s" => \@bcclist, "chain-reply-to!" => \$chain_reply_to, + "delay=i" => \$delay, "smtp-server=s" => \$smtp_server, "smtp-server-port=s" => \$smtp_server_port, "smtp-user=s" => \$smtp_authuser, @@ -973,8 +976,9 @@ $references = $initial_reply_to || ''; $subject = $initial_subject; $message_num = 0; -foreach my $t (@files) { - open(F,"<",$t) or die "can't open file $t"; +for (my $index = 0; $index < @files; $index++) { + my $file = $files[$index]; + open(F,"<",$file) or die "can't open file $file"; my $author = undef; my $author_encoding; @@ -1083,7 +1087,7 @@ foreach my $t (@files) { close F; if (defined $cc_cmd && !$suppress_cc{'cccmd'}) { - open(F, "$cc_cmd $t |") + open(F, "$cc_cmd $file |") or die "(cc-cmd) Could not execute '$cc_cmd'"; while(<F>) { my $c = $_; @@ -1128,6 +1132,11 @@ foreach my $t (@files) { send_message(); + if ($delay && $index < $#files) { + my $this_long = $delay; + while (($this_long -= sleep $this_long) > 0) {} + } + # set up for the next message if ($chain_reply_to || !defined $reply_to || length($reply_to) == 0) { $reply_to = $message_id; -- 1.6.2.2.448.g61445.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html