aboutsummaryrefslogtreecommitdiff
path: root/git-send-email.perl
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2007-09-17 21:18:20 -0700
committerJunio C Hamano <gitster@pobox.com>2007-09-17 22:02:19 -0700
commitbe510cfef3d8344007bd34128ca6eb799b714c8c (patch)
tree4c1136f834d85ca27f5f1870e46352d56927c249 /git-send-email.perl
parentd7416ecac8508367a8ac35ab74ef09b7707d0c4b (diff)
downloadgit-be510cfef3d8344007bd34128ca6eb799b714c8c.tar.gz
git-be510cfef3d8344007bd34128ca6eb799b714c8c.tar.xz
send-email: make message-id generation a bit more robust
Earlier code took Unix time and appended a few random digits. If you are firing off many messages within a second, you could issue the same id to different messages, which is a no-no. If you send out 31 messages within a single second, with random integer taken out of rand(4200), you have about 10% chance of producing the same message ID. This fixes the problem by uses a prefix string which is constant-per-invocation (time and pid), with a serial number for each message generated by the process appended at the end. Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'git-send-email.perl')
-rwxr-xr-xgit-send-email.perl15
1 files changed, 11 insertions, 4 deletions
diff --git a/git-send-email.perl b/git-send-email.perl
index 195fe6f70..9547cc37a 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -437,10 +437,17 @@ sub extract_valid_address {
# We'll setup a template for the message id, using the "from" address:
+my ($message_id_stamp, $message_id_serial);
sub make_message_id
{
- my $date = time;
- my $pseudo_rand = int (rand(4200));
+ my $uniq;
+ if (!defined $message_id_stamp) {
+ $message_id_stamp = sprintf("%s-%s", time, $$);
+ $message_id_serial = 0;
+ }
+ $message_id_serial++;
+ $uniq = "$message_id_stamp-$message_id_serial";
+
my $du_part;
for ($sender, $repocommitter, $repoauthor) {
$du_part = extract_valid_address(sanitize_address($_));
@@ -450,8 +457,8 @@ sub make_message_id
use Sys::Hostname qw();
$du_part = 'user@' . Sys::Hostname::hostname();
}
- my $message_id_template = "<%s-git-send-email-$du_part>";
- $message_id = sprintf $message_id_template, "$date$pseudo_rand";
+ my $message_id_template = "<%s-git-send-email-%s>";
+ $message_id = sprintf($message_id_template, $uniq, $du_part);
#print "new message id = $message_id\n"; # Was useful for debugging
}