~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/timestamp.py

(jelmer) Deprecate Repository.iter_reverse_revision_history(). (Jelmer
 Vernooij)

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
import calendar
18
18
import time
19
 
import re
20
19
 
21
20
from bzrlib import osutils
22
21
 
125
124
            date_fmt='%Y-%m-%d %H:%M:%S')
126
125
 
127
126
 
128
 
# Format for patch dates: %Y-%m-%d %H:%M:%S [+-]%H%M
129
 
# Groups: 1 = %Y-%m-%d %H:%M:%S; 2 = [+-]%H; 3 = %M
130
 
RE_PATCHDATE = re.compile("(\d+-\d+-\d+\s+\d+:\d+:\d+)\s*([+-]\d\d)(\d\d)$")
131
 
RE_PATCHDATE_NOOFFSET = re.compile("\d+-\d+-\d+\s+\d+:\d+:\d+$")
132
 
 
133
127
def parse_patch_date(date_str):
134
128
    """Parse a patch-style date into a POSIX timestamp and offset.
135
129
 
136
130
    Inverse of format_patch_date.
137
131
    """
138
 
    match = RE_PATCHDATE.match(date_str)
139
 
    if match is None:
140
 
        if RE_PATCHDATE_NOOFFSET.match(date_str) is not None:
141
 
            raise ValueError("time data %r is missing a timezone offset"
142
 
                % date_str)
143
 
        else:
144
 
            raise ValueError("time data %r does not match format " % date_str
145
 
                + "'%Y-%m-%d %H:%M:%S %z'")
146
 
    secs_str = match.group(1)
147
 
    offset_hours, offset_mins = int(match.group(2)), int(match.group(3))
148
 
    if abs(offset_hours) >= 24 or offset_mins >= 60:
149
 
        raise ValueError("invalid timezone %r" %
150
 
            (match.group(2) + match.group(3)))
151
 
    offset = offset_hours * 3600 + offset_mins * 60
 
132
    secs_str = date_str[:-6]
 
133
    offset_str = date_str[-5:]
 
134
    if len(offset_str) != 5:
 
135
        raise ValueError(
 
136
            "invalid timezone %r" % offset_str)
 
137
    offset_hours, offset_mins = offset_str[:3], offset_str[3:]
 
138
    offset = int(offset_hours) * 3600 + int(offset_mins) * 60
152
139
    tm_time = time.strptime(secs_str, '%Y-%m-%d %H:%M:%S')
153
140
    # adjust seconds according to offset before converting to POSIX
154
141
    # timestamp, to avoid edge problems