git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* git-send-email creates duplicate Message-Id's
       [not found] <11900179463203-git-send-email-avi@qumranet.com>
@ 2007-09-17 15:59 ` Adrian Bunk
  2007-09-17 20:22   ` Junio C Hamano
  0 siblings, 1 reply; 3+ messages in thread
From: Adrian Bunk @ 2007-09-17 15:59 UTC (permalink / raw)
  To: Avi Kivity; +Cc: linux-kernel, git

The following might be a bug in git-send-email (git maintainers Cc'ed
and KVM list removed from Cc): 

Patch 54 got the same Message-Id as patch 61 and patch 89 got the same 
Message-Id as patch 104.

That's not legal, and users who automatically filter duplicate emails 
based on the Message-Id will not see two of the patches.

The emails are:
http://marc.info/?l=linux-kernel&m=119002061330270&w=2
http://marc.info/?l=linux-kernel&m=119002059626434&w=2
http://marc.info/?l=linux-kernel&m=119002060011801&w=2
http://marc.info/?l=linux-kernel&m=119002060318915&w=2

cu
Adrian

-- 

       "Is there not promise of rain?" Ling Tan asked suddenly out
        of the darkness. There had been need of rain for many days.
       "Only a promise," Lao Er said.
                                       Pearl S. Buck - Dragon Seed

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: git-send-email creates duplicate Message-Id's
  2007-09-17 15:59 ` git-send-email creates duplicate Message-Id's Adrian Bunk
@ 2007-09-17 20:22   ` Junio C Hamano
  2007-09-17 20:47     ` Matti Aarnio
  0 siblings, 1 reply; 3+ messages in thread
From: Junio C Hamano @ 2007-09-17 20:22 UTC (permalink / raw)
  To: Adrian Bunk; +Cc: Avi Kivity, linux-kernel, git

Adrian Bunk <bunk@kernel.org> writes:

> The following might be a bug in git-send-email (git maintainers Cc'ed
> and KVM list removed from Cc): 
>
> Patch 54 got the same Message-Id as patch 61 and patch 89 got the same 
> Message-Id as patch 104.
> ...
> The emails are:
> http://marc.info/?l=linux-kernel&m=119002061330270&w=2
> http://marc.info/?l=linux-kernel&m=119002059626434&w=2
> http://marc.info/?l=linux-kernel&m=119002060011801&w=2
> http://marc.info/?l=linux-kernel&m=119002060318915&w=2

The old code generated rand(4200) for each message and appended
it to the timestamp.  I do not know where the original author
got 4200 from, but I think if you send many messages within a
single second it is possible to get collisions.

I guess something like this patch is an improvement?  It
generates a single prefix from timestamp and random, and appends
a number that is incremented for each message.

---
diff --git a/git-send-email.perl b/git-send-email.perl
index dd7560b..e250732 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -477,10 +477,18 @@ 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, int(rand(4200)));
+		$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($_));
@@ -490,8 +498,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
 }
 

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: git-send-email creates duplicate Message-Id's
  2007-09-17 20:22   ` Junio C Hamano
@ 2007-09-17 20:47     ` Matti Aarnio
  0 siblings, 0 replies; 3+ messages in thread
From: Matti Aarnio @ 2007-09-17 20:47 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Adrian Bunk, Avi Kivity, linux-kernel, git

On Mon, Sep 17, 2007 at 01:22:05PM -0700, Junio C Hamano wrote:
> Adrian Bunk <bunk@kernel.org> writes:
> 
> > The following might be a bug in git-send-email (git maintainers Cc'ed
> > and KVM list removed from Cc): 
> >
> > Patch 54 got the same Message-Id as patch 61 and patch 89 got the same 
> > Message-Id as patch 104.
> > ...
> > The emails are:
> > http://marc.info/?l=linux-kernel&m=119002061330270&w=2
> > http://marc.info/?l=linux-kernel&m=119002059626434&w=2
> > http://marc.info/?l=linux-kernel&m=119002060011801&w=2
> > http://marc.info/?l=linux-kernel&m=119002060318915&w=2
> 
> The old code generated rand(4200) for each message and appended
> it to the timestamp.  I do not know where the original author
> got 4200 from, but I think if you send many messages within a
> single second it is possible to get collisions.
> 
> I guess something like this patch is an improvement?  It
> generates a single prefix from timestamp and random, and appends
> a number that is incremented for each message.

Much better.   You may also consider a possibility of
letting your local MTA do the  Message-ID generation, unless
you are tracking something with it and thus need to know the
generated values.  .. but apparently git much prefers sending
email by SMTP, where the message-id must be present, or one
really should block any such emails..  (except that systems
like qmail send error messages without message-id ...)

My own recipe is:
       sprintf("%d-%d-%d", time , getpid, ++localsequence)
catenate on that your favourite domain name where that recipe
is likely to be valid, and you are all set.


  /Matti Aarnio  --  one of  <postmaster@vger.kernel.org>

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2007-09-17 20:47 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <11900179463203-git-send-email-avi@qumranet.com>
2007-09-17 15:59 ` git-send-email creates duplicate Message-Id's Adrian Bunk
2007-09-17 20:22   ` Junio C Hamano
2007-09-17 20:47     ` Matti Aarnio

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).