Mercurial > public > mercurial-scm > hg
comparison mercurial/util.py @ 6139:989467e8e3a9
Fix bad behaviour when specifying an invalid date (issue700)
commit (aborts _after_ typing in a commit message)
backout (aborted after the initial revert)
tag (edited .hgtags and couldn't commit)
import (patch applied, then commit fails)
qnew (aborts on bad dates, but writes any valid date into the # Date header)
qrefresh (like qnew)
sign (like tag)
fetch (merge, merge, merge, merge, abort)
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Sun, 17 Feb 2008 21:34:28 +0100 |
parents | be91a77b7f18 |
children | 47e6d5d5913a |
comparison
equal
deleted
inserted
replaced
6138:09847b90beae | 6139:989467e8e3a9 |
---|---|
1570 offset = unixtime - localunixtime | 1570 offset = unixtime - localunixtime |
1571 else: | 1571 else: |
1572 unixtime = localunixtime + offset | 1572 unixtime = localunixtime + offset |
1573 return unixtime, offset | 1573 return unixtime, offset |
1574 | 1574 |
1575 def parsedate(string, formats=None, defaults=None): | 1575 def parsedate(date, formats=None, defaults=None): |
1576 """parse a localized time string and return a (unixtime, offset) tuple. | 1576 """parse a localized date/time string and return a (unixtime, offset) tuple. |
1577 | |
1577 The date may be a "unixtime offset" string or in one of the specified | 1578 The date may be a "unixtime offset" string or in one of the specified |
1578 formats.""" | 1579 formats. If the date already is a (unixtime, offset) tuple, it is returned. |
1579 if not string: | 1580 """ |
1581 if not date: | |
1580 return 0, 0 | 1582 return 0, 0 |
1583 if type(date) is type((0, 0)) and len(date) == 2: | |
1584 return date | |
1581 if not formats: | 1585 if not formats: |
1582 formats = defaultdateformats | 1586 formats = defaultdateformats |
1583 string = string.strip() | 1587 date = date.strip() |
1584 try: | 1588 try: |
1585 when, offset = map(int, string.split(' ')) | 1589 when, offset = map(int, date.split(' ')) |
1586 except ValueError: | 1590 except ValueError: |
1587 # fill out defaults | 1591 # fill out defaults |
1588 if not defaults: | 1592 if not defaults: |
1589 defaults = {} | 1593 defaults = {} |
1590 now = makedate() | 1594 now = makedate() |
1597 else: | 1601 else: |
1598 defaults[part] = datestr(now, "%" + part[0], False) | 1602 defaults[part] = datestr(now, "%" + part[0], False) |
1599 | 1603 |
1600 for format in formats: | 1604 for format in formats: |
1601 try: | 1605 try: |
1602 when, offset = strdate(string, format, defaults) | 1606 when, offset = strdate(date, format, defaults) |
1603 except (ValueError, OverflowError): | 1607 except (ValueError, OverflowError): |
1604 pass | 1608 pass |
1605 else: | 1609 else: |
1606 break | 1610 break |
1607 else: | 1611 else: |
1608 raise Abort(_('invalid date: %r ') % string) | 1612 raise Abort(_('invalid date: %r ') % date) |
1609 # validate explicit (probably user-specified) date and | 1613 # validate explicit (probably user-specified) date and |
1610 # time zone offset. values must fit in signed 32 bits for | 1614 # time zone offset. values must fit in signed 32 bits for |
1611 # current 32-bit linux runtimes. timezones go from UTC-12 | 1615 # current 32-bit linux runtimes. timezones go from UTC-12 |
1612 # to UTC+14 | 1616 # to UTC+14 |
1613 if abs(when) > 0x7fffffff: | 1617 if abs(when) > 0x7fffffff: |