aboutsummaryrefslogtreecommitdiff
path: root/t/helper/test-date.c
diff options
context:
space:
mode:
authorJohannes Schindelin <johannes.schindelin@gmx.de>2017-04-20 22:52:13 +0200
committerJunio C Hamano <gitster@pobox.com>2017-04-20 22:07:15 -0700
commita07fb0507fdf745704e54d77aa19780580636f56 (patch)
treef0c8b7f6e8a73da1a94ffe7edfe9c1cd9e7a42e9 /t/helper/test-date.c
parente467dc148d0375ed83300589281f749fcbdd690d (diff)
downloadgit-a07fb0507fdf745704e54d77aa19780580636f56.tar.gz
git-a07fb0507fdf745704e54d77aa19780580636f56.tar.xz
t0006 & t5000: prepare for 64-bit timestamps
Git's source code refers to timestamps as unsigned longs. On 32-bit platforms, as well as on Windows, unsigned long is not large enough to capture dates that are "absurdly far in the future". It is perfectly valid by the C standard, of course, for the `long` data type to refer to 32-bit integers. That is why the `time_t` data type exists: so that it can be 64-bit even if `long` is 32-bit. Git's source code simply uses an incorrect data type for timestamps, is all. The earlier quick fix 6b9c38e14cd (t0006: skip "far in the future" test when unsigned long is not long enough, 2016-07-11) papered over this issue simply by skipping the respective test cases on platforms where they would fail due to the data type in use. This quick fix, however, tests for *long* to be 64-bit or not. What we need, though, is a test that says whether *whatever data type we use for timestamps* is 64-bit or not. The same quick fix was used to handle the similar problem where Git's source code uses `unsigned long` to represent size, instead of `size_t`, conflating the two issues. So let's just add another prerequisite to test specifically whether timestamps are represented by a 64-bit data type or not. Later, after we switch to a larger data type, we can flip that prerequisite to test `time_t` instead of `long`. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/helper/test-date.c')
-rw-r--r--t/helper/test-date.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/t/helper/test-date.c b/t/helper/test-date.c
index 506054bcd..4727bea25 100644
--- a/t/helper/test-date.c
+++ b/t/helper/test-date.c
@@ -4,7 +4,8 @@ static const char *usage_msg = "\n"
" test-date relative [time_t]...\n"
" test-date show:<format> [time_t]...\n"
" test-date parse [date]...\n"
-" test-date approxidate [date]...\n";
+" test-date approxidate [date]...\n"
+" test-date is64bit\n";
static void show_relative_dates(const char **argv, struct timeval *now)
{
@@ -93,6 +94,8 @@ int cmd_main(int argc, const char **argv)
parse_dates(argv+1, &now);
else if (!strcmp(*argv, "approxidate"))
parse_approxidate(argv+1, &now);
+ else if (!strcmp(*argv, "is64bit"))
+ return sizeof(unsigned long) == 8 ? 0 : 1;
else
usage(usage_msg);
return 0;