From: Johannes Schindelin <Johannes.Schindelin@gmx.de>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 0/6] Use time_t
Date: Tue, 28 Feb 2017 12:32:01 +0100 (CET) [thread overview]
Message-ID: <alpine.DEB.2.20.1702281211270.3767@virtualbox> (raw)
In-Reply-To: <xmqqlgsrmesc.fsf@gitster.mtv.corp.google.com>
Hi Junio,
On Mon, 27 Feb 2017, Junio C Hamano wrote:
> Johannes Schindelin <johannes.schindelin@gmx.de> writes:
>
> > One notable fallout of this patch series is that on 64-bit Linux (and
> > other platforms where `unsigned long` is 64-bit), we now limit the
> > range of dates to LONG_MAX (i.e. the *signed* maximum value). This
> > needs to be done as `time_t` can be signed (and indeed is at least on
> > my Ubuntu setup).
> >
> > Obviously, I think that we can live with that, and I hope that all
> > interested parties agree.
>
> s/ulong/time_t/ is definintely a good change, and it will take us to a
> place we would want to be in in some future.
Actually. I have to take back the part where I hoped that all interested
parties would agree. The problem is 32-bit Linux:
$ cat >a1.c <<-\EOF
#include <stdio.h>
#include <limits.h>
#include <time.h>
int main(int argc, char **argv)
{
printf("sizeof(long): %d, sizeof(time_t): %d, ulong_max: %lu\n",
(int)sizeof(long), (int)sizeof(time_t), ULONG_MAX);
return 0;
}
EOF
$ gcc -m32 -Wall -o a1 a1.c
$ ./a1
sizeof(long): 4, sizeof(time_t): 4, ulong_max: 4294967295
So. Not only is `long` a 32-bit on 32-bit Linux, but so is `time_t`. And
with that, switching from `ULONG_MAX` as the maximal time we can represent
in Git to `LONG_MAX` is kind of a serious problem.
> As long as there remains no platform we care about whose time_t and long
> are still 32-bit signed integer, there will be a fallout to them with
> this change.
Sorry, I do not understand the verb "remains" in conjunction with "no
platform"...
Do you mean to say that currently no platform we care about has 32-bit
signed time_t/long?
If so, I just demonstrated this to be unfortunately incorrect.
> It appears that we use uint64_t in many places in our code. So
> while philosophically time_t is the right type, uint64_t might be
> practically a safer alternative type to use at the endgame patch in
> this series.
Yes, I think you are right. We should use uint64_t instead of time_t, but
*semantically* we should not even use uint64_t. We should introduce our
own data type instead of repeating the mistake to use a data type that
does not convey its role to the reader.
Currently, I am favoring timestamp_t.
> I haven't seen it yet, but presumably the last one 6/6 is the endgame?
Maybe it took a while to get sent out, but it made it into public inbox:
http://public-inbox.org/git/75efe76cbb0636741a7c3aec9e21459bc1dc3cbe.1488231002.git.johannes.schindelin@gmx.de/
Ciao,
Johannes
next prev parent reply other threads:[~2017-02-28 11:36 UTC|newest]
Thread overview: 113+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-27 21:30 [PATCH 0/6] Use time_t Johannes Schindelin
2017-02-27 21:30 ` [PATCH 1/6] t0006 & t5000: prepare for 64-bit time_t Johannes Schindelin
2017-02-27 22:55 ` Junio C Hamano
2017-02-27 21:30 ` [PATCH 2/6] Specify explicitly where we parse timestamps Johannes Schindelin
2017-02-27 22:37 ` Junio C Hamano
2017-02-27 22:51 ` Junio C Hamano
2017-02-28 10:49 ` Johannes Schindelin
2017-02-27 21:31 ` [PATCH 3/6] Introduce a new "printf format" for timestamps Johannes Schindelin
2017-03-01 18:20 ` Junio C Hamano
2017-03-01 19:53 ` Junio C Hamano
2017-02-27 21:31 ` [PATCH 4/6] Prepare for timestamps to use 64-bit signed types Johannes Schindelin
2017-02-27 21:31 ` [PATCH 5/6] ref-filter: avoid using `unsigned long` for catch-all data type Johannes Schindelin
2017-02-27 21:31 ` [PATCH 6/6] Use time_t where appropriate Johannes Schindelin
2017-02-27 22:48 ` [PATCH 0/6] Use time_t Junio C Hamano
2017-02-28 11:32 ` Johannes Schindelin [this message]
2017-02-28 14:28 ` Jeff King
2017-02-28 15:01 ` Johannes Schindelin
2017-02-28 16:38 ` René Scharfe
2017-02-28 18:55 ` Junio C Hamano
2017-02-28 20:04 ` Jeff King
2017-02-28 20:54 ` Johannes Schindelin
2017-02-28 21:31 ` Jeff King
2017-02-28 21:31 ` René Scharfe
2017-02-28 23:10 ` Johannes Schindelin
2017-03-01 0:59 ` René Scharfe
2017-02-28 17:26 ` Junio C Hamano
2017-02-28 20:01 ` Jeff King
2017-02-28 22:27 ` Junio C Hamano
2017-02-28 22:33 ` Jeff King
2017-03-01 17:23 ` Junio C Hamano
2017-04-02 19:06 ` [PATCH v2 0/8] Introduce timestamp_t for timestamps Johannes Schindelin
2017-04-02 19:06 ` [PATCH v2 1/8] ref-filter: avoid using `unsigned long` for catch-all data type Johannes Schindelin
2017-04-03 4:22 ` Torsten Bögershausen
2017-04-03 22:47 ` Johannes Schindelin
2017-04-02 19:06 ` [PATCH v2 2/8] t0006 & t5000: prepare for 64-bit timestamps Johannes Schindelin
2017-04-02 19:06 ` [PATCH v2 3/8] t0006 & t5000: skip "far in the future" test when time_t is too limited Johannes Schindelin
2017-04-02 19:06 ` [PATCH v2 4/8] Specify explicitly where we parse timestamps Johannes Schindelin
2017-04-03 4:26 ` Torsten Bögershausen
2017-04-03 22:50 ` Johannes Schindelin
2017-04-02 19:06 ` [PATCH v2 5/8] Introduce a new "printf format" for timestamps Johannes Schindelin
2017-04-02 19:06 ` [PATCH v2 6/8] Introduce a new data type " Johannes Schindelin
2017-04-02 19:07 ` [PATCH v2 7/8] Abort if the system time cannot handle one of our timestamps Johannes Schindelin
2017-04-02 19:07 ` [PATCH v2 8/8] Use uintmax_t for timestamps Johannes Schindelin
2017-04-20 20:52 ` [PATCH v3 0/8] Introduce timestamp_t " Johannes Schindelin
2017-04-20 20:52 ` [PATCH v3 1/8] ref-filter: avoid using `unsigned long` for catch-all data type Johannes Schindelin
2017-04-20 20:52 ` [PATCH v3 2/8] t0006 & t5000: prepare for 64-bit timestamps Johannes Schindelin
2017-04-20 20:58 ` [PATCH v3 3/8] t0006 & t5000: skip "far in the future" test when time_t is too limited Johannes Schindelin
2017-04-20 20:58 ` [PATCH v3 4/8] Specify explicitly where we parse timestamps Johannes Schindelin
2017-04-20 20:58 ` [PATCH v3 5/8] Introduce a new "printf format" for timestamps Johannes Schindelin
2017-04-20 20:58 ` [PATCH v3 6/8] Introduce a new data type " Johannes Schindelin
2017-04-20 20:58 ` [PATCH v3 7/8] Abort if the system time cannot handle one of our timestamps Johannes Schindelin
2017-04-20 20:59 ` [PATCH v3 8/8] Use uintmax_t for timestamps Johannes Schindelin
2017-04-21 6:05 ` [PATCH v3 0/8] Introduce timestamp_t " Junio C Hamano
2017-04-21 10:44 ` Johannes Schindelin
2017-04-21 10:45 ` [PATCH v4 0/9] " Johannes Schindelin
2017-04-21 10:45 ` [PATCH v4 1/9] ref-filter: avoid using `unsigned long` for catch-all data type Johannes Schindelin
2017-04-21 10:45 ` [PATCH v4 2/9] t0006 & t5000: prepare for 64-bit timestamps Johannes Schindelin
2017-04-21 10:45 ` [PATCH v4 3/9] t0006 & t5000: skip "far in the future" test when time_t is too limited Johannes Schindelin
2017-04-21 10:45 ` [PATCH v4 4/9] Specify explicitly where we parse timestamps Johannes Schindelin
2017-04-24 3:19 ` Junio C Hamano
2017-04-21 10:45 ` [PATCH v4 5/9] Introduce a new "printf format" for timestamps Johannes Schindelin
2017-04-21 10:45 ` [PATCH v4 6/9] Introduce a new data type " Johannes Schindelin
2017-04-21 10:45 ` [PATCH v4 7/9] Abort if the system time cannot handle one of our timestamps Johannes Schindelin
2017-04-24 3:16 ` Junio C Hamano
2017-04-24 13:57 ` Johannes Schindelin
2017-04-25 2:37 ` Junio C Hamano
2017-04-25 3:56 ` Junio C Hamano
2017-04-21 10:46 ` [PATCH v4 8/9] Use uintmax_t for timestamps Johannes Schindelin
2017-04-24 3:24 ` Junio C Hamano
2017-04-24 10:28 ` Johannes Schindelin
2017-04-25 3:59 ` Junio C Hamano
2017-04-25 20:10 ` Johannes Schindelin
2017-04-26 1:52 ` Junio C Hamano
2017-04-26 3:45 ` Junio C Hamano
2017-04-26 9:32 ` Johannes Schindelin
2017-04-26 13:18 ` Junio C Hamano
2017-04-21 10:46 ` [PATCH v4 9/9] show_date_ident(): defer date overflow check Johannes Schindelin
2017-04-24 3:29 ` [PATCH v4 0/9] Introduce timestamp_t for timestamps Junio C Hamano
2017-04-24 6:15 ` Jacob Keller
2017-04-24 14:02 ` Johannes Schindelin
2017-04-24 11:37 ` Jeff King
2017-04-25 20:13 ` Johannes Schindelin
2017-04-24 14:00 ` Johannes Schindelin
2017-04-24 13:57 ` [PATCH v5 0/8] " Johannes Schindelin
2017-04-24 13:57 ` [PATCH v5 1/8] ref-filter: avoid using `unsigned long` for catch-all data type Johannes Schindelin
2017-04-24 13:57 ` [PATCH v5 2/8] t0006 & t5000: prepare for 64-bit timestamps Johannes Schindelin
2017-04-24 13:58 ` [PATCH v5 3/8] t0006 & t5000: skip "far in the future" test when time_t is too limited Johannes Schindelin
2017-04-24 13:58 ` [PATCH v5 4/8] Specify explicitly where we parse timestamps Johannes Schindelin
2017-04-25 5:59 ` Junio C Hamano
2017-04-24 13:58 ` [PATCH v5 5/8] Introduce a new "printf format" for timestamps Johannes Schindelin
2017-04-24 13:58 ` [PATCH v5 6/8] Introduce a new data type " Johannes Schindelin
2017-04-26 16:43 ` Johannes Sixt
2017-04-26 19:18 ` Johannes Schindelin
2017-04-26 22:32 ` René Scharfe
2017-04-24 13:58 ` [PATCH v5 7/8] Abort if the system time cannot handle one of our timestamps Johannes Schindelin
2017-04-24 13:58 ` [PATCH v5 8/8] Use uintmax_t for timestamps Johannes Schindelin
2017-04-26 16:36 ` Johannes Sixt
2017-04-26 19:09 ` Johannes Schindelin
2017-04-25 21:54 ` [PATCH v5 0/8] Introduce timestamp_t " René Scharfe
2017-04-25 22:22 ` Johannes Schindelin
2017-04-26 22:09 ` René Scharfe
2017-04-26 1:56 ` Junio C Hamano
2017-04-26 19:20 ` [PATCH v6 " Johannes Schindelin
2017-04-26 19:26 ` [PATCH v6 1/8] ref-filter: avoid using `unsigned long` for catch-all data type Johannes Schindelin
2017-04-26 19:26 ` [PATCH v6 2/8] t0006 & t5000: prepare for 64-bit timestamps Johannes Schindelin
2017-04-26 19:26 ` [PATCH v6 3/8] t0006 & t5000: skip "far in the future" test when time_t is too limited Johannes Schindelin
2017-04-26 19:26 ` [PATCH v6 4/8] Specify explicitly where we parse timestamps Johannes Schindelin
2017-04-26 19:29 ` [PATCH v6 5/8] Introduce a new "printf format" for timestamps Johannes Schindelin
2017-04-26 19:29 ` [PATCH v6 6/8] Introduce a new data type " Johannes Schindelin
2017-05-20 5:47 ` [PATCH] name-rev: change a "long" variable to timestamp_t Junio C Hamano
2017-05-22 13:39 ` Johannes Schindelin
2017-04-26 19:29 ` [PATCH v6 7/8] Abort if the system time cannot handle one of our timestamps Johannes Schindelin
2017-04-26 19:29 ` [PATCH v6 8/8] Use uintmax_t for timestamps Johannes Schindelin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=alpine.DEB.2.20.1702281211270.3767@virtualbox \
--to=johannes.schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.