Re: [PATCH] apply: Recognize epoch timestamps with : in the timezone
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:49:47
Jonathan Nieder [off-list ref] writes:
Junio C Hamano wrote:quoted
Junio C Hamano [off-list ref] writes:quoted
quoted
Neither the patch nor your suggestion makes much sense to me. With the patch, the regexp is now ^(1969-12-31|1970-01-01) <time>(\.0+)? ([-+][0-2][0-9]):?([0-5][0-9])[...]quoted
Well, I was missing that without ':' strtol() goes through to parse $3$4 as a single integerSo maybe something like the following would make this easier to follow.
Yeah, this feels much more natural.
quoted hunk
diff --git a/builtin/apply.c b/builtin/apply.c index 0fa9a8d..000d3e5 100644 --- a/builtin/apply.c +++ b/builtin/apply.c@@ -733,8 +733,8 @@ static int has_epoch_timestamp(const char *nameline) " " "[0-2][0-9]:[0-5][0-9]:00(\\.0+)?" " " - "([-+][0-2][0-9]):?([0-5][0-9])\n"; + "([-+][0-2][0-9]:?[0-5][0-9])\n"; - const char *timestamp = NULL, *cp; + const char *timestamp = NULL, *cp, *colon; static regex_t *stamp; regmatch_t m[10]; int zoneoffset;@@ -764,10 +764,11 @@ static int has_epoch_timestamp(const char *nameline) return 0; } - zoneoffset = strtol(timestamp + m[3].rm_so + 1, NULL, 10); + zoneoffset = strtol(timestamp + m[3].rm_so + 1, (char **) &colon, 10); - if (m[4].rm_so == m[3].rm_so + 3) - zoneoffset /= 100; - zoneoffset = zoneoffset * 60 + strtol(timestamp + m[4].rm_so, NULL, 10); + if (*colon == ':') + zoneoffset = zoneoffset * 60 + strtol(colon + 1, NULL, 10); + else + zoneoffset = (zoneoffset / 100) * 60 + (zoneoffset % 100); if (timestamp[m[3].rm_so] == '-') zoneoffset = -zoneoffset;