date: accept 'hence' as opposite of 'ago'
authorEric Blake <eblake@redhat.com>
Fri, 16 Sep 2011 20:52:54 +0000 (14:52 -0600)
committerEric Blake <eblake@redhat.com>
Mon, 19 Sep 2011 16:51:34 +0000 (10:51 -0600)
* lib/parse-datetime.y (relative_time_table): Add 'hence'.
* tests/test-parse-datetime.c (main): Enhance test.
Suggested by Jesse Wilson.

Signed-off-by: Eric Blake <eblake@redhat.com>
ChangeLog
lib/parse-datetime.y
tests/test-parse-datetime.c

index 50a43e8..ddbbe0e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2011-09-19  Eric Blake  <eblake@redhat.com>
+
+       date: accept 'hence' as opposite of 'ago'
+       * lib/parse-datetime.y (relative_time_table): Add 'hence'.
+       * tests/test-parse-datetime.c (main): Enhance test.
+       Suggested by Jesse Wilson.
+
 2011-09-19  Jim Meyering  <meyering@redhat.com>
 
        getcwd: don't fail in a deep directory on a system without openat
index 33ef01a..d99c955 100644 (file)
@@ -296,7 +296,8 @@ set_hhmmss (parser_control *pc, long int hour, long int minutes,
   relative_time rel;
 }
 
-%token tAGO tDST
+%token <intval> tAGO
+%token tDST
 
 %token tYEAR_UNIT tMONTH_UNIT tHOUR_UNIT tMINUTE_UNIT tSEC_UNIT
 %token <intval> tDAY_UNIT tDAY_SHIFT
@@ -544,7 +545,7 @@ iso_8601_date:
 
 rel:
     relunit tAGO
-      { apply_relative_time (pc, $1, -1); }
+      { apply_relative_time (pc, $1, $2); }
   | relunit
       { apply_relative_time (pc, $1, 1); }
   | dayshift
@@ -733,7 +734,8 @@ static table const relative_time_table[] =
   { "TENTH",    tORDINAL,       10 },
   { "ELEVENTH", tORDINAL,       11 },
   { "TWELFTH",  tORDINAL,       12 },
-  { "AGO",      tAGO,            1 },
+  { "AGO",      tAGO,           -1 },
+  { "HENCE",    tAGO,            1 },
   { NULL, 0, 0 }
 };
 
index ac408cc..b9d08a6 100644 (file)
@@ -327,6 +327,8 @@ main (int argc _GL_UNUSED, char **argv)
   ASSERT (!parse_datetime (&result, p, &now));
   p = "UTC+4:00 tomorrow ago";
   ASSERT (!parse_datetime (&result, p, &now));
+  p = "UTC+4:00 tomorrow hence";
+  ASSERT (!parse_datetime (&result, p, &now));
   p = "UTC+4:00 40 now ago";
   ASSERT (!parse_datetime (&result, p, &now));
   p = "UTC+4:00 last tomorrow";
@@ -345,6 +347,11 @@ main (int argc _GL_UNUSED, char **argv)
   LOG (p, now, result2);
   ASSERT (result.tv_sec == result2.tv_sec
           && result.tv_nsec == result2.tv_nsec);
+  p = "UTC+400 1 day hence";
+  ASSERT (parse_datetime (&result2, p, &now));
+  LOG (p, now, result2);
+  ASSERT (result.tv_sec == result2.tv_sec
+          && result.tv_nsec == result2.tv_nsec);
   now.tv_sec = 4711;
   now.tv_nsec = 1267;
   p = "UTC+400 yesterday";