# HG changeset patch # User Paul Cavallaro # Date 1358963505 28800 # Node ID ae60735e37d2866908a3e4b77b99aa08e523c08c # Parent ae645d4f084c912018efdd89f85b438d751564b5 dates: support 'today' and 'yesterday' in parsedate (issue3764) Adding support to parsedate in util module to understand the more idiomatic dates 'today' and 'yesterday'. Added unified tests and docstring tests for added functionality. diff -r ae645d4f084c -r ae60735e37d2 mercurial/help/dates.txt --- a/mercurial/help/dates.txt Mon Jan 28 12:19:21 2013 -0800 +++ b/mercurial/help/dates.txt Wed Jan 23 09:51:45 2013 -0800 @@ -18,6 +18,8 @@ - ``12-6`` - ``12/6`` - ``12/6/6`` (Dec 6 2006) +- ``today`` (midnight) +- ``yesterday`` (midnight) Lastly, there is Mercurial's internal format: diff -r ae645d4f084c -r ae60735e37d2 mercurial/util.py --- a/mercurial/util.py Mon Jan 28 12:19:21 2013 -0800 +++ b/mercurial/util.py Wed Jan 23 09:51:45 2013 -0800 @@ -1027,6 +1027,14 @@ The date may be a "unixtime offset" string or in one of the specified formats. If the date already is a (unixtime, offset) tuple, it is returned. + + >>> parsedate(' today ') == parsedate(\ + datetime.date.today().strftime('%b %d')) + True + >>> parsedate( 'yesterday ') == parsedate((datetime.date.today() -\ + datetime.timedelta(days=1)\ + ).strftime('%b %d')) + True """ if not date: return 0, 0 @@ -1035,6 +1043,13 @@ if not formats: formats = defaultdateformats date = date.strip() + + if date == _('today'): + date = datetime.date.today().strftime('%b %d') + elif date == _('yesterday'): + date = (datetime.date.today() - + datetime.timedelta(days=1)).strftime('%b %d') + try: when, offset = map(int, date.split(' ')) except ValueError: diff -r ae645d4f084c -r ae60735e37d2 tests/test-parse-date.t --- a/tests/test-parse-date.t Mon Jan 28 12:19:21 2013 -0800 +++ b/tests/test-parse-date.t Wed Jan 23 09:51:45 2013 -0800 @@ -234,3 +234,20 @@ Sat Apr 15 13:30:00 2006 +0000 Wed Feb 01 13:00:30 2006 -0500 Wed Feb 01 13:00:30 2006 +0000 + +Test issue 3764 (interpreting 'today' and 'yesterday') + $ echo "hello" >> a + >>> import datetime + >>> today = datetime.date.today().strftime("%b %d") + >>> yesterday = (datetime.date.today() - datetime.timedelta(days=1)).strftime("%b %d") + >>> dates = open('dates', 'w') + >>> dates.write(today + '\n') + >>> dates.write(yesterday) + >>> dates.close() + $ hg ci -d "`sed -n '1p' dates`" -m "today is a good day to code" + $ hg log -d today --template '{desc}\n' + today is a good day to code + $ echo "goodbye" >> a + $ hg ci -d "`sed -n '2p' dates`" -m "the time traveler's code" + $ hg log -d yesterday --template '{desc}\n' + the time traveler's code