git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 1/9] Export parse_date_basic() to convert a date string to timestamp

From
Jonathan Nieder <jrnieder@gmail.com>
Date
Jun 24, 2010, 10:51 UTC
Message-ID
<20100624105146.GA12376@burratino>
In-Reply-To
<20100624105004.GA12336@burratino>

approxidate() is not appropriate for reading machine-written dates because it guesses instead of erroring out on malformed dates. parse_date() is less convenient since it returns its output as a string. So export the underlying function that writes a timestamp.

While at it, change the return value to match the usual convention: return 0 for success and -1 for failure.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
 cache.h |    1 +
 date.c  |   14 ++++++--------
 2 files changed, 7 insertions(+), 8 deletions(-)
diff --git a/cache.h b/cache.h
index ff4a7c2..4566501 100644
--- a/cache.h
+++ b/cache.h
@@ -800,6 +800,7 @@ const char *show_date_relative(unsigned long time, int tz,
 			       char *timebuf,
 			       size_t timebuf_size);
 int parse_date(const char *date, char *buf, int bufsize);
+int parse_date_basic(const char *date, unsigned long *timestamp, int *offset);
 void datestamp(char *buf, int bufsize);
 #define approxidate(s) approxidate_careful((s), NULL)
 unsigned long approxidate_careful(const char *, int *);
diff --git a/date.c b/date.c
index 68cdcaa..383706d 100644
--- a/date.c
+++ b/date.c
@@ -586,7 +586,7 @@ static int date_string(unsigned long date, int offset, char *buf, int len)
 
 /* Gr. strptime is crap for this; it doesn't have a way to require RFC2822
    (i.e. English) day/month names, and it doesn't work correctly with %z. */
-int parse_date_toffset(const char *date, unsigned long *timestamp, int *offset)
+int parse_date_basic(const char *date, unsigned long *timestamp, int *offset)
 {
 	struct tm tm;
 	int tm_gmt;
@@ -642,17 +642,16 @@ int parse_date_toffset(const char *date, unsigned long *timestamp, int *offset)
 
 	if (!tm_gmt)
 		*timestamp -= *offset * 60;
-	return 1; /* success */
+	return 0; /* success */
 }
 
 int parse_date(const char *date, char *result, int maxlen)
 {
 	unsigned long timestamp;
 	int offset;
-	if (parse_date_toffset(date, &timestamp, &offset) > 0)
-		return date_string(timestamp, offset, result, maxlen);
-	else
+	if (parse_date_basic(date, &timestamp, &offset))
 		return -1;
+	return date_string(timestamp, offset, result, maxlen);
 }
 
 enum date_mode parse_date_format(const char *format)
@@ -1004,9 +1003,8 @@ unsigned long approxidate_relative(const char *date, const struct timeval *tv)
 	int offset;
 	int errors = 0;
 
-	if (parse_date_toffset(date, &timestamp, &offset) > 0)
+	if (!parse_date_basic(date, &timestamp, &offset))
 		return timestamp;
-
 	return approxidate_str(date, tv, &errors);
 }
 
@@ -1019,7 +1017,7 @@ unsigned long approxidate_careful(const char *date, int *error_ret)
 	if (!error_ret)
 		error_ret = &dummy;
 
-	if (parse_date_toffset(date, &timestamp, &offset) > 0) {
+	if (!parse_date_basic(date, &timestamp, &offset)) {
 		*error_ret = 0;
 		return timestamp;
 	}
-- 
1.7.1
Previous: Jonathan NiederNext: Ramkumar Ramachandra
Message 2 of 35 in “Subversion dump parsing library”
  1. 0/9 Subversion dump parsing libraryJonathan Nieder, Jun 24, 2010
  2. 1/9 Export parse_date_basic() to convert a date string to timestampJonathan Nieder, Jun 24, 2010
  3. Ramkumar RamachandraJun 24, 2010
  4. 2/9 Introduce vcs-svn libJonathan Nieder, Jun 24, 2010
  5. Ramkumar RamachandraJun 24, 2010
  6. 3/9 Add memory pool libraryJonathan Nieder, Jun 24, 2010
  7. Ramkumar RamachandraJun 24, 2010
  8. Jonathan NiederJun 24, 2010
  9. Ramkumar RamachandraJun 24, 2010
  10. Jonathan NiederJun 24, 2010
  11. Ramkumar RamachandraJun 24, 2010
  12. 4/9 Add treap implementationJonathan Nieder, Jun 24, 2010
  13. Ramkumar RamachandraJun 24, 2010
  14. Jonathan NiederJun 24, 2010
  15. 5/9 Add string-specific memory poolJonathan Nieder, Jun 24, 2010
  16. Ramkumar RamachandraJun 24, 2010
  17. 6/9 Add stream helper libraryJonathan Nieder, Jun 24, 2010
  18. Ramkumar RamachandraJun 24, 2010
  19. Jonathan NiederJun 24, 2010
  20. 7/9 Add infrastructure to write revisions in fast-export formatJonathan Nieder, Jun 24, 2010
  21. Ramkumar RamachandraJun 24, 2010
  22. Jonathan NiederJun 24, 2010
  23. Jonathan NiederJun 24, 2010
  24. Ramkumar RamachandraJun 24, 2010
  25. 8/9 Add SVN dump parserJonathan Nieder, Jun 24, 2010
  26. Ramkumar RamachandraJun 24, 2010
  27. 9/9 Add a sample user for the svndump libraryJonathan Nieder, Jun 24, 2010
  28. Ramkumar RamachandraJun 24, 2010
  29. Jonathan NiederJun 24, 2010
  30. Ramkumar RamachandraJun 24, 2010
  31. Jonathan NiederJun 24, 2010
  32. Sam VilainJun 30, 2010
  33. Ramkumar RamachandraJun 24, 2010
  34. Jonathan NiederJun 24, 2010
  35. Jonathan NiederJun 24, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.