summaryrefslogtreecommitdiff
path: root/cache.h
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2010-01-26 11:58:00 -0800
committerJunio C Hamano <gitster@pobox.com>2010-01-26 13:51:41 -0800
commit93cfa7c7a85efbdb00daade4ad0afc11bd2fdf37 (patch)
treec3eb3ae7229b9e55ca29bfedb9695928bc019764 /cache.h
parent35eabd1579726d594e84fc8328a5c87693dd065a (diff)
downloadgit-93cfa7c7a85efbdb00daade4ad0afc11bd2fdf37.tar.gz
approxidate_careful() reports errorneous date string
For a long time, the time based reflog syntax (e.g. master@{yesterday}) didn't complain when the "human readable" timestamp was misspelled, as the underlying mechanism tried to be as lenient as possible. The funny thing was that parsing of "@{now}" even relied on the fact that anything not recognized by the machinery returned the current timestamp. Introduce approxidate_careful() that takes an optional pointer to an integer, that gets assigned 1 when the input does not make sense as a timestamp. As I am too lazy to fix all the callers that use approxidate(), most of the callers do not take advantage of the error checking, but convert the code to parse reflog to use it as a demonstration. Tests are mostly from Jeff King. Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'cache.h')
-rw-r--r--cache.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/cache.h b/cache.h
index b90f671f7c..0f163dbbe1 100644
--- a/cache.h
+++ b/cache.h
@@ -740,7 +740,8 @@ const char *show_date_relative(unsigned long time, int tz,
size_t timebuf_size);
int parse_date(const char *date, char *buf, int bufsize);
void datestamp(char *buf, int bufsize);
-unsigned long approxidate(const char *);
+#define approxidate(s) approxidate_careful((s), NULL)
+unsigned long approxidate_careful(const char *, int *);
unsigned long approxidate_relative(const char *date, const struct timeval *now);
enum date_mode parse_date_format(const char *format);