diff options
author | Junio C Hamano <gitster@pobox.com> | 2015-05-11 14:33:58 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2015-05-11 14:33:58 -0700 |
commit | 13ec221d8cb054051cd9d4da236b4f7dc6facbfb (patch) | |
tree | 6fb43be1a5eba2fc68b6efddef91f0b1c62b357b | |
parent | 16018ae5fb368151f3eff13730cf089b63f41962 (diff) | |
parent | f6e6362107a1e7a798dc1c28ef439a3157813467 (diff) | |
download | git-13ec221d8cb054051cd9d4da236b4f7dc6facbfb.tar.gz |
Merge branch 'jc/epochtime-wo-tz' into maint-2.3
"git commit --date=now" or anything that relies on approxidate lost
the daylight-saving-time offset.
* jc/epochtime-wo-tz:
parse_date_basic(): let the system handle DST conversion
parse_date_basic(): return early when given a bogus timestamp
-rw-r--r-- | date.c | 14 |
1 files changed, 9 insertions, 5 deletions
@@ -704,10 +704,17 @@ int parse_date_basic(const char *date, unsigned long *timestamp, int *offset) date += match; } - /* mktime uses local timezone */ + /* do not use mktime(), which uses local timezone, here */ *timestamp = tm_to_time_t(&tm); + if (*timestamp == -1) + return -1; + if (*offset == -1) { - time_t temp_time = mktime(&tm); + time_t temp_time; + + /* gmtime_r() in match_digit() may have clobbered it */ + tm.tm_isdst = -1; + temp_time = mktime(&tm); if ((time_t)*timestamp > temp_time) { *offset = ((time_t)*timestamp - temp_time) / 60; } else { @@ -715,9 +722,6 @@ int parse_date_basic(const char *date, unsigned long *timestamp, int *offset) } } - if (*timestamp == -1) - return -1; - if (!tm_gmt) *timestamp -= *offset * 60; return 0; /* success */ |