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>
This commit is contained in:
parent
d7416ecac8
commit
be510cfef3
@ -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
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user