# [PATCH] send-email: more meaningful Message-ID

5 messages from 2016-04-05 to 2016-04-06. Participants: Eric Wong, Junio C Hamano, Johannes Schindelin.
Thread: https://gitlist.dev/t/41935

## Eric Wong, 2016-04-05 19:39

Subject: [PATCH] send-email: more meaningful Message-ID
Message-ID: <20160405193952.5849-1-normalperson@yhbt.net>
URL: https://gitlist.dev/e/20160405193952.5849-1-normalperson%40yhbt.net

```
Using a YYYYmmddHHMMSS date representation is more meaningful to
humans, especially when used for lookups on NNTP servers or linking
to archive sites via Message-ID (e.g. mid.gmane.org or
mid.mail-archive.com).  This timestamp format more easily gives a
reader of the URL itself a rough date of a linked message compared
to having them calculate the seconds since the Unix epoch.

Furthermore, having the MUA name in the Message-ID seems to be a
rare oddity I haven't noticed outside of git-send-email.  We
already have an optional X-Mailer header field to advertise for
us, so extending the Message-ID by 15 characters can make for
unpleasant Message-ID-based URLs to archive sites.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
---
 git-send-email.perl | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/git-send-email.perl b/git-send-email.perl
index d356901..23141e7 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -949,7 +949,8 @@ my ($message_id_stamp, $message_id_serial);
 sub make_message_id {
 	my $uniq;
 	if (!defined $message_id_stamp) {
-		$message_id_stamp = sprintf("%s-%s", time, $$);
+		use POSIX qw/strftime/;
+		$message_id_stamp = strftime("%Y%m%d%H%M%S.$$", gmtime(time));
 		$message_id_serial = 0;
 	}
 	$message_id_serial++;
@@ -964,7 +965,7 @@ sub make_message_id {
 		require Sys::Hostname;
 		$du_part = 'user@' . Sys::Hostname::hostname();
 	}
-	my $message_id_template = "<%s-git-send-email-%s>";
+	my $message_id_template = "<%s-%s>";
 	$message_id = sprintf($message_id_template, $uniq, $du_part);
 	#print "new message id = $message_id\n"; # Was useful for debugging
 }
-- 
EW

```

## Junio C Hamano, 2016-04-05 21:10

Subject: Re: [PATCH] send-email: more meaningful Message-ID
Message-ID: <xmqqinzv224x.fsf@gitster.mtv.corp.google.com>
URL: https://gitlist.dev/e/xmqqinzv224x.fsf%40gitster.mtv.corp.google.com
In-Reply-To: <20160405193952.5849-1-normalperson@yhbt.net>

```
Eric Wong <normalperson@yhbt.net> writes:

> Using a YYYYmmddHHMMSS date representation is more meaningful to
> humans, especially when used for lookups on NNTP servers or linking
> to archive sites via Message-ID (e.g. mid.gmane.org or
> mid.mail-archive.com).  This timestamp format more easily gives a
> reader of the URL itself a rough date of a linked message compared
> to having them calculate the seconds since the Unix epoch.
>
> Furthermore, having the MUA name in the Message-ID seems to be a
> rare oddity I haven't noticed outside of git-send-email.  We
> already have an optional X-Mailer header field to advertise for
> us, so extending the Message-ID by 15 characters can make for
> unpleasant Message-ID-based URLs to archive sites.
>
> Signed-off-by: Eric Wong <normalperson@yhbt.net>
> ---

Sounds like a sensible goal.  Just a few comments.

 - Is it safe to assume that we always can use POSIX::strftime(), or
   do we need some fallback?  I am guessing that this is safe, as
   POSIX has been part of the core modules for a long time, and the
   script does "use 5.008" upfront.

 - It is my understanding that, as "use" is a compilation-time
   thing, hiding it inside a block does not help reducing the
   start-up overhead (people can use "require" if they want to do a
   lazy loading and optionally a fallback).  Is my Perl5 outdated?
   Otherwise, let's have it near the beginning of the script, close
   to where we use Term::ReadLine and others.

Thanks.

>  git-send-email.perl | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/git-send-email.perl b/git-send-email.perl
> index d356901..23141e7 100755
> --- a/git-send-email.perl
> +++ b/git-send-email.perl
> @@ -949,7 +949,8 @@ my ($message_id_stamp, $message_id_serial);
>  sub make_message_id {
>  	my $uniq;
>  	if (!defined $message_id_stamp) {
> -		$message_id_stamp = sprintf("%s-%s", time, $$);
> +		use POSIX qw/strftime/;
> +		$message_id_stamp = strftime("%Y%m%d%H%M%S.$$", gmtime(time));
>  		$message_id_serial = 0;
>  	}
>  	$message_id_serial++;
> @@ -964,7 +965,7 @@ sub make_message_id {
>  		require Sys::Hostname;
>  		$du_part = 'user@' . Sys::Hostname::hostname();
>  	}
> -	my $message_id_template = "<%s-git-send-email-%s>";
> +	my $message_id_template = "<%s-%s>";
>  	$message_id = sprintf($message_id_template, $uniq, $du_part);
>  	#print "new message id = $message_id\n"; # Was useful for debugging
>  }

```

## Eric Wong, 2016-04-05 21:36

Subject: Re: [PATCH] send-email: more meaningful Message-ID
Message-ID: <20160405213607.GA15023@dcvr.yhbt.net>
URL: https://gitlist.dev/e/20160405213607.GA15023%40dcvr.yhbt.net
In-Reply-To: <xmqqinzv224x.fsf@gitster.mtv.corp.google.com>

```
Junio C Hamano <gitster@pobox.com> wrote:
> Eric Wong <normalperson@yhbt.net> writes:
> 
> > Using a YYYYmmddHHMMSS date representation is more meaningful to
> > humans, especially when used for lookups on NNTP servers or linking
> > to archive sites via Message-ID (e.g. mid.gmane.org or
> > mid.mail-archive.com).  This timestamp format more easily gives a
> > reader of the URL itself a rough date of a linked message compared
> > to having them calculate the seconds since the Unix epoch.
> >
> > Furthermore, having the MUA name in the Message-ID seems to be a
> > rare oddity I haven't noticed outside of git-send-email.  We
> > already have an optional X-Mailer header field to advertise for
> > us, so extending the Message-ID by 15 characters can make for
> > unpleasant Message-ID-based URLs to archive sites.
> >
> > Signed-off-by: Eric Wong <normalperson@yhbt.net>
> > ---
> 
> Sounds like a sensible goal.  Just a few comments.
> 
>  - Is it safe to assume that we always can use POSIX::strftime(), or
>    do we need some fallback?  I am guessing that this is safe, as
>    POSIX has been part of the core modules for a long time, and the
>    script does "use 5.008" upfront.

I'm hoping so :)  And none of the format specifiers used here
should be subject to locale-dependent weirdness, at least.

+Cc both Johannes for Windows knowledge.

>  - It is my understanding that, as "use" is a compilation-time
>    thing, hiding it inside a block does not help reducing the
>    start-up overhead (people can use "require" if they want to do a
>    lazy loading and optionally a fallback).  Is my Perl5 outdated?
>    Otherwise, let's have it near the beginning of the script, close
>    to where we use Term::ReadLine and others.

You're correct, I'll move the "use" to the top in v2.

I could call "require" and call the sub as "POSIX::strftime",
but this code path is likely enough that any startup time
improvement for uncommon cases wouldn't be worth it.

Will wait a bit for strftime portability comments before v2.

> > --- a/git-send-email.perl
> > +++ b/git-send-email.perl
> > @@ -949,7 +949,8 @@ my ($message_id_stamp, $message_id_serial);
> >  sub make_message_id {
> >  	my $uniq;
> >  	if (!defined $message_id_stamp) {
> > -		$message_id_stamp = sprintf("%s-%s", time, $$);
> > +		use POSIX qw/strftime/;
> > +		$message_id_stamp = strftime("%Y%m%d%H%M%S.$$", gmtime(time));
> >  		$message_id_serial = 0;
> >  	}
> >  	$message_id_serial++;

```

## Johannes Schindelin, 2016-04-06 13:08

Subject: Re: [PATCH] send-email: more meaningful Message-ID
Message-ID: <alpine.DEB.2.20.1604061505010.3371@virtualbox>
URL: https://gitlist.dev/e/alpine.DEB.2.20.1604061505010.3371%40virtualbox
In-Reply-To: <20160405213607.GA15023@dcvr.yhbt.net>

```
Hi,

On Tue, 5 Apr 2016, Eric Wong wrote:

> Junio C Hamano <gitster@pobox.com> wrote:
> > Eric Wong <normalperson@yhbt.net> writes:
> > 
> > > Using a YYYYmmddHHMMSS date representation is more meaningful to
> > > humans, especially when used for lookups on NNTP servers or linking
> > > to archive sites via Message-ID (e.g. mid.gmane.org or
> > > mid.mail-archive.com).  This timestamp format more easily gives a
> > > reader of the URL itself a rough date of a linked message compared
> > > to having them calculate the seconds since the Unix epoch.
> > >
> > > Furthermore, having the MUA name in the Message-ID seems to be a
> > > rare oddity I haven't noticed outside of git-send-email.  We
> > > already have an optional X-Mailer header field to advertise for
> > > us, so extending the Message-ID by 15 characters can make for
> > > unpleasant Message-ID-based URLs to archive sites.
> > >
> > > Signed-off-by: Eric Wong <normalperson@yhbt.net>
> > > ---
> > 
> > Sounds like a sensible goal.  Just a few comments.
> > 
> >  - Is it safe to assume that we always can use POSIX::strftime(), or
> >    do we need some fallback?  I am guessing that this is safe, as
> >    POSIX has been part of the core modules for a long time, and the
> >    script does "use 5.008" upfront.
> 
> I'm hoping so :)  And none of the format specifiers used here
> should be subject to locale-dependent weirdness, at least.
> 
> +Cc both Johannes for Windows knowledge.

Thanks.

send-email is implemented as a Perl script, and Git for Windows uses a
Perl interpreter for such scripts which uses MSYS2's POSIX emulation
layer, i.e. POSIX calls are fine.

Short answer: no problem there, not even on Windows.

Of course, Git for Windows users are much more likely to use a Pull
Request based workflow than a mail-based one, so it is even less of a
problem for us.

Ciao,
Dscho

```

## Eric Wong, 2016-04-06 20:07

Subject: [PATCH v2] send-email: more meaningful Message-ID
Message-ID: <20160406200714.GA19315@dcvr.yhbt.net>
URL: https://gitlist.dev/e/20160406200714.GA19315%40dcvr.yhbt.net
In-Reply-To: <20160405213607.GA15023@dcvr.yhbt.net>

```
Using a YYYYmmddHHMMSS date representation is more meaningful to
humans, especially when used for lookups on NNTP servers or linking
to archive sites via Message-ID (e.g. mid.gmane.org or
mid.mail-archive.com).  This timestamp format more easily gives a
reader of the URL itself a rough date of a linked message compared
to having them calculate the seconds since the Unix epoch.

Furthermore, having the MUA name in the Message-ID seems to be a
rare oddity I haven't noticed outside of git-send-email.  We
already have an optional X-Mailer header field to advertise for
us, so extending the Message-ID by 15 characters can make for
unpleasant Message-ID-based URLs to archive sites.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
---
  v2 - moved "use" to the top
  Thanks to Dscho for addressing Windows comments:
  http://mid.gmane.org/alpine.DEB.2.20.1604061505010.3371@virtualbox

 git-send-email.perl | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/git-send-email.perl b/git-send-email.perl
index d356901..52cf828 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -19,6 +19,7 @@
 use 5.008;
 use strict;
 use warnings;
+use POSIX qw/strftime/;
 use Term::ReadLine;
 use Getopt::Long;
 use Text::ParseWords;
@@ -949,7 +950,7 @@ my ($message_id_stamp, $message_id_serial);
 sub make_message_id {
 	my $uniq;
 	if (!defined $message_id_stamp) {
-		$message_id_stamp = sprintf("%s-%s", time, $$);
+		$message_id_stamp = strftime("%Y%m%d%H%M%S.$$", gmtime(time));
 		$message_id_serial = 0;
 	}
 	$message_id_serial++;
@@ -964,7 +965,7 @@ sub make_message_id {
 		require Sys::Hostname;
 		$du_part = 'user@' . Sys::Hostname::hostname();
 	}
-	my $message_id_template = "<%s-git-send-email-%s>";
+	my $message_id_template = "<%s-%s>";
 	$message_id = sprintf($message_id_template, $uniq, $du_part);
 	#print "new message id = $message_id\n"; # Was useful for debugging
 }
-- 
EW

```
