Merge branch 'jk/commit-dates-parsing-fix' into maint
* jk/commit-dates-parsing-fix: t4212: loosen far-in-future test for AIX date: recognize bogus FreeBSD gmtime output
This commit is contained in:
commit
b8a30194db
8
Makefile
8
Makefile
@ -342,6 +342,9 @@ all::
|
|||||||
# Define DEFAULT_HELP_FORMAT to "man", "info" or "html"
|
# Define DEFAULT_HELP_FORMAT to "man", "info" or "html"
|
||||||
# (defaults to "man") if you want to have a different default when
|
# (defaults to "man") if you want to have a different default when
|
||||||
# "git help" is called without a parameter specifying the format.
|
# "git help" is called without a parameter specifying the format.
|
||||||
|
#
|
||||||
|
# Define GMTIME_UNRELIABLE_ERRORS if your gmtime() function does not
|
||||||
|
# return NULL when it receives a bogus time_t.
|
||||||
|
|
||||||
GIT-VERSION-FILE: FORCE
|
GIT-VERSION-FILE: FORCE
|
||||||
@$(SHELL_PATH) ./GIT-VERSION-GEN
|
@$(SHELL_PATH) ./GIT-VERSION-GEN
|
||||||
@ -1494,6 +1497,11 @@ ifneq (,$(XDL_FAST_HASH))
|
|||||||
BASIC_CFLAGS += -DXDL_FAST_HASH
|
BASIC_CFLAGS += -DXDL_FAST_HASH
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifdef GMTIME_UNRELIABLE_ERRORS
|
||||||
|
COMPAT_OBJS += compat/gmtime.o
|
||||||
|
BASIC_CFLAGS += -DGMTIME_UNRELIABLE_ERRORS
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(TCLTK_PATH),)
|
ifeq ($(TCLTK_PATH),)
|
||||||
NO_TCLTK = NoThanks
|
NO_TCLTK = NoThanks
|
||||||
endif
|
endif
|
||||||
|
29
compat/gmtime.c
Normal file
29
compat/gmtime.c
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
#include "../git-compat-util.h"
|
||||||
|
#undef gmtime
|
||||||
|
#undef gmtime_r
|
||||||
|
|
||||||
|
struct tm *git_gmtime(const time_t *timep)
|
||||||
|
{
|
||||||
|
static struct tm result;
|
||||||
|
return git_gmtime_r(timep, &result);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct tm *git_gmtime_r(const time_t *timep, struct tm *result)
|
||||||
|
{
|
||||||
|
struct tm *ret;
|
||||||
|
|
||||||
|
memset(result, 0, sizeof(*result));
|
||||||
|
ret = gmtime_r(timep, result);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Rather than NULL, FreeBSD gmtime simply leaves the "struct tm"
|
||||||
|
* untouched when it encounters overflow. Since "mday" cannot otherwise
|
||||||
|
* be zero, we can test this very quickly.
|
||||||
|
*/
|
||||||
|
if (ret && !ret->tm_mday) {
|
||||||
|
ret = NULL;
|
||||||
|
errno = EOVERFLOW;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
@ -188,6 +188,7 @@ ifeq ($(uname_S),FreeBSD)
|
|||||||
endif
|
endif
|
||||||
PYTHON_PATH = /usr/local/bin/python
|
PYTHON_PATH = /usr/local/bin/python
|
||||||
HAVE_PATHS_H = YesPlease
|
HAVE_PATHS_H = YesPlease
|
||||||
|
GMTIME_UNRELIABLE_ERRORS = UnfortunatelyYes
|
||||||
endif
|
endif
|
||||||
ifeq ($(uname_S),OpenBSD)
|
ifeq ($(uname_S),OpenBSD)
|
||||||
NO_STRCASESTR = YesPlease
|
NO_STRCASESTR = YesPlease
|
||||||
|
@ -721,4 +721,11 @@ void warn_on_inaccessible(const char *path);
|
|||||||
/* Get the passwd entry for the UID of the current process. */
|
/* Get the passwd entry for the UID of the current process. */
|
||||||
struct passwd *xgetpwuid_self(void);
|
struct passwd *xgetpwuid_self(void);
|
||||||
|
|
||||||
|
#ifdef GMTIME_UNRELIABLE_ERRORS
|
||||||
|
struct tm *git_gmtime(const time_t *);
|
||||||
|
struct tm *git_gmtime_r(const time_t *, struct tm *);
|
||||||
|
#define gmtime git_gmtime
|
||||||
|
#define gmtime_r git_gmtime_r
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -82,11 +82,9 @@ test_expect_success 'date parser recognizes time_t overflow' '
|
|||||||
'
|
'
|
||||||
|
|
||||||
# date is within 2^63-1, but enough to choke glibc's gmtime
|
# date is within 2^63-1, but enough to choke glibc's gmtime
|
||||||
test_expect_success 'absurdly far-in-future dates produce sentinel' '
|
test_expect_success 'absurdly far-in-future date' '
|
||||||
commit=$(munge_author_date HEAD 999999999999999999) &&
|
commit=$(munge_author_date HEAD 999999999999999999) &&
|
||||||
echo "Thu Jan 1 00:00:00 1970 +0000" >expect &&
|
git log -1 --format=%ad $commit
|
||||||
git log -1 --format=%ad $commit >actual &&
|
|
||||||
test_cmp expect actual
|
|
||||||
'
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
Loading…
Reference in New Issue
Block a user