From 537c21c68cdd9cf69b0db1823cfb0a631f946b47 Mon Sep 17 00:00:00 2001
From: Martin Stjernholm <mast@lysator.liu.se>
Date: Wed, 5 Sep 2012 14:07:00 +0200
Subject: [PATCH] Fixed bug where the month was lost with %a to Calendar.parse.

---
 lib/modules/Calendar.pmod/YMD.pike     | 4 ++--
 lib/modules/Calendar.pmod/testsuite.in | 2 ++
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/lib/modules/Calendar.pmod/YMD.pike b/lib/modules/Calendar.pmod/YMD.pike
index b260d89613..9557e824a4 100644
--- a/lib/modules/Calendar.pmod/YMD.pike
+++ b/lib/modules/Calendar.pmod/YMD.pike
@@ -2877,14 +2877,14 @@ TimeRange parse(string fmt,string arg,void|TimeRange context)
 	 {
 	    m->month=low=m->year->month(m->M);
 	 }
-	 if (m->W) 
+	 if (m->W)
 	    m->week=low=m->year->week("w"+m->W);
 
 	 if (!zero_type(m->D))
 	    m->day=low=(m->month||(context?context->month():cal->Month()))
 	       ->day((int)m->D);
 	 else if (!zero_type(m->a))
-	    m->day=low=m->year->day(m->a);
+	    m->day=low=(m->month || m->year)->day(m->a);
 	 else if (!zero_type(m->e))
 	    m->day=low=(m->week||(context?context->week():cal->Week()))
 	       ->day(m->e);
diff --git a/lib/modules/Calendar.pmod/testsuite.in b/lib/modules/Calendar.pmod/testsuite.in
index cb50fd22a7..39aee6c8c2 100644
--- a/lib/modules/Calendar.pmod/testsuite.in
+++ b/lib/modules/Calendar.pmod/testsuite.in
@@ -77,6 +77,8 @@ test_equal( Calendar.ISO.parse("%dT%h:%m:%s", "19980717T14:08:55")->set_timezone
 test_equal( Calendar.ISO.set_timezone("UTC")->parse("%dT%h:%m:%s", "19980717T14:08:55"),
             Calendar.ISO.set_timezone("UTC")->parse("%dT%h:%m:%s", "19980717T14:08:55") )
 
+test_eq(Calendar.parse ("%Y %M %a", "2005 Oct  7"), Calendar.Day (2005, 10, 7))
+test_eq(Calendar.parse ("%Y %a", "2005 7"), Calendar.Day (2005, 1, 7))
 
 
 
-- 
GitLab