nmh-workers
[Top] [All Lists]

Re: [nmh-workers] Reproducible build patch

2018-07-23 16:48:39
On Mon, 23 Jul 2018 14:09:13 -0400, Ken Hornstein said:
On Mon, 23 Jul 2018 09:17:45 -0400, Ken Hornstein said:

DATE_FMT="%Y-%m-%d %T +0000"
SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:-$(date +s)}"
date=$(TZ=GMT0 date --date="@$SOURCE_DATE_EPOCH" "+$DATE_FMT" 2>/dev/null 
||
date -u -r "$SOURCE_DATE_EPOCH" "+$DATE_FMT" 2>/dev/null || date -u 
"+$DATE_FMT")

I doubt that's right - at least on Fedora, /usr/bin/date doesn't work that 
way....

Um, isn't /usr/bin/date on Fedora GNU date?  If so, shouldn't the --date
option work?

Well, first off - last I heard we support nmh on more than just Linux.

Also, the "date +s" and the "date -u -r" don't do what you think they do...

16:24:10 1 [~] set -v
16:24:22 0 [~] set -x
set -x
16:24:27 0 [~] DATE_FMT="%Y-%m-%d %T +0000"
DATE_FMT="%Y-%m-%d %T +0000"
+ DATE_FMT='%Y-%m-%d %T +0000'
16:24:35 0 [~] SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:-$(date +s)}"
SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:-$(date +s)}"
++ date +s                                  Not set, so we take the replacement 
value...
+ SOURCE_DATE_EPOCH=s        *** probably not what we intended
16:24:44 0 [~] date=$(TZ=GMT0 date --date="@$SOURCE_DATE_EPOCH" "+$DATE_FMT" 
2>/dev/null || date -u -r "$SOURCE_DATE_EPOCH" "+$DATE_FMT" 2>/dev/null || date 
-u "+$DATE_FMT")
date=$(TZ=GMT0 date --date="@$SOURCE_DATE_EPOCH" "+$DATE_FMT" 2>/dev/null || 
date -u -r "$SOURCE_DATE_EPOCH" "+$DATE_FMT" 2>/dev/null || date -u 
"+$DATE_FMT")
++ TZ=GMT0
++ date --date=@s '+%Y-%m-%d %T +0000'     (This dies because --date=@s  is 
bogus
++ date -u -r s '+%Y-%m-%d %T +0000'           (This dies because '-r s' is 
bogus as there's no file 's' to snarf a timestamp from
++ date -u '+%Y-%m-%d %T +0000'            And we end up in the last case, 
which works.
+ date='2018-07-23 20:25:04 +0000'

Now, this may magically work if $SOURCE_DATE_EPOCH is set to something
sane before we enter this code - but if it isn't set, it only happens to work

Aha.  Found it.  In the debian.org link:

BUILD_DATE="$(date --utc --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}" +%Y-%m-%d)"

date +%s
16:32:25 123 [~/src/nmh] date +%s
1532378290

6:38:59 0 [~] DATE_FMT="%Y-%m-%d %T +0000"
DATE_FMT="%Y-%m-%d %T +0000"
+ DATE_FMT='%Y-%m-%d %T +0000'
16:39:05 0 [~] SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:-$(date +%s)}"
SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:-$(date +%s)}"
++ date +%s
+ SOURCE_DATE_EPOCH=1532378360
16:39:20 0 [~] date=$(TZ=GMT0 date --date="@$SOURCE_DATE_EPOCH" "+$DATE_FMT" 
2>/dev/null || date -u -r "$SOURCE_DATE_EPOCH" "+$DATE_FMT" 2>/dev/null || date 
-u "+$DATE_FMT")
date=$(TZ=GMT0 date --date="@$SOURCE_DATE_EPOCH" "+$DATE_FMT" 2>/dev/null || 
date -u -r "$SOURCE_DATE_EPOCH" "+$DATE_FMT" 2>/dev/null || date -u 
"+$DATE_FMT")
++ TZ=GMT0
++ date --date=@1532378360 '+%Y-%m-%d %T +0000'
+ date='2018-07-23 20:39:20 +0000'

That %s matters.  A lot.

I'm assuming that the BSD 'date'  takes -r as a timestamp rather than a 
filename.  Somebody
on a BSD system will need to check that.




Attachment: pgpQ2nsVvTook.pgp
Description: PGP signature

-- 
nmh-workers
https://lists.nongnu.org/mailman/listinfo/nmh-workers
<Prev in Thread] Current Thread [Next in Thread>