@matheusbsbs / matheus-bagliano / commits / 931e8e27d9
Fork 0

fix approxidate parsing of relative months and years

These were broken by b5373e9. The problem is that the code marks the month and year with "-1" for "we don't know it yet", but the month and year code paths were not adjusted to fill in the current time before doing their calculations (whereas other units follow a different code path and are fine). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jeff King committed Aug 30, 2009 at 22:31 UTC 931e8e27d94dbc24abc9c969ae0b414e0361abff
2 files changed +6 -3
date.c
+4 -1
@@ -857,7 +857,9 @@ static const char *approxidate_alpha(const char *date, struct tm *tm, struct tm
857 }
858
859 if (match_string(date, "months") >= 5) {
860 - int n = tm->tm_mon - *num;
860 + int n;
861 + update_tm(tm, now, 0); /* fill in date fields if needed */
862 + n = tm->tm_mon - *num;
863 *num = 0;
864 while (n < 0) {
865 n += 12;
@@ -868,6 +870,7 @@ static const char *approxidate_alpha(const char *date, struct tm *tm, struct tm
870 }
871
872 if (match_string(date, "years") >= 4) {
873 + update_tm(tm, now, 0); /* fill in date fields if needed */
874 tm->tm_year -= *num;
875 *num = 0;
876 return end;
t/t0006-date.sh
+2 -2
@@ -53,8 +53,8 @@ check_approxidate 10.minutes.ago '2009-08-30 19:10:00'
53 check_approxidate yesterday '2009-08-29 19:20:00'
54 check_approxidate 3.days.ago '2009-08-27 19:20:00'
55 check_approxidate 3.weeks.ago '2009-08-09 19:20:00'
56 -check_approxidate 3.months.ago '2009-05-30 19:20:00' failure
57 -check_approxidate 2.years.3.months.ago '2007-05-30 19:20:00' failure
56 +check_approxidate 3.months.ago '2009-05-30 19:20:00'
57 +check_approxidate 2.years.3.months.ago '2007-05-30 19:20:00'
58
59 check_approxidate '6am yesterday' '2009-08-29 06:00:00'
60 check_approxidate '6pm yesterday' '2009-08-29 18:00:00'