~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/changeset/common.py

  • Committer: Aaron Bentley
  • Date: 2006-05-25 17:56:25 UTC
  • mto: This revision was merged to the branch mainline in revision 1738.
  • Revision ID: abentley@panoramicfeedback.com-20060525175625-c239c2e6526ffe6e
Cleanups to prepare for review

Show diffs side-by-side

added added

removed removed

Lines of Context:
8
8
header_str = 'Bazaar changeset v'
9
9
version = (0, 7)
10
10
 
 
11
 
11
12
def get_header():
12
13
    return [
13
14
        header_str + '.'.join([str(v) for v in version]),
14
15
        ''
15
16
    ]
16
17
 
17
 
def canonicalize_revision(branch, revnos):
18
 
    """Turn some sort of revision information into a single
19
 
    set of from-to revision ids.
20
 
 
21
 
    A revision id can be None if there is no associated revison.
22
 
 
23
 
    :param revnos:  A list of revisions to lookup, should be at most 2 long
24
 
    :return: (old, new)
25
 
    """
26
 
    # If only 1 entry is given, then we assume we want just the
27
 
    # changeset between that entry and it's base (we assume parents[0])
28
 
    if len(revnos) == 0:
29
 
        revnos = [None, None]
30
 
    elif len(revnos) == 1:
31
 
        revnos = [None, revnos[0]]
32
 
 
33
 
    if revnos[1] is None:
34
 
        new = branch.last_patch()
35
 
    else:
36
 
        new = branch.lookup_revision(revnos[1])
37
 
    if revnos[0] is None:
38
 
        if new is None:
39
 
            old = None
40
 
        else:
41
 
            oldrev = branch.get_revision(new)
42
 
            if len(oldrev.parents) == 0:
43
 
                old = None
44
 
            else:
45
 
                old = oldrev.parents[0].revision_id
46
 
    else:
47
 
        old = branch.lookup_revision(revnos[0])
48
 
 
49
 
    return old, new
50
 
 
51
 
       
 
18
      
52
19
def encode(s):
53
20
    """Take a unicode string, and make sure to escape it for
54
21
    use in a changeset.
72
39
    """
73
40
    return s.encode('utf-8')
74
41
 
 
42
 
75
43
def decode(s):
76
44
    """Undo the encode operation, returning a unicode string.
77
45
 
88
56
    """
89
57
    return s.decode('utf-8')
90
58
 
 
59
 
91
60
def format_highres_date(t, offset=0):
92
61
    """Format a date, such that it includes higher precision in the
93
62
    seconds field.
123
92
    tt = time.gmtime(t + offset)
124
93
 
125
94
    return (time.strftime("%a %Y-%m-%d %H:%M:%S", tt)
126
 
            + ('%.9f' % (t - int(t)))[1:] # Get the high-res seconds, but ignore the 0
 
95
            + ('%.9f' % (t - int(t)))[1:] # Get the high-res seconds, but
 
96
                                          # ignore the 0
127
97
            + ' %+03d%02d' % (offset / 3600, (offset / 60) % 60))
128
98
 
 
99
 
129
100
def unpack_highres_date(date):
130
101
    """This takes the high-resolution date stamp, and
131
102
    converts it back into the tuple (timestamp, timezone)
132
 
    Where timestamp is in real UTC since epoch seconds, and timezone is an integer
133
 
    number of seconds offset.
 
103
    Where timestamp is in real UTC since epoch seconds, and timezone is an
 
104
    integer number of seconds offset.
134
105
 
135
106
    :param date: A date formated by format_highres_date
136
107
    :type date: string
168
139
    # parse it
169
140
    dot_loc = date.find('.')
170
141
    if dot_loc == -1:
171
 
        raise ValueError('Date string does not contain high-precision seconds: %r' % date)
 
142
        raise ValueError('Date string does not contain high-precision seconds:'
 
143
                         ' %r' % date)
172
144
    base_time = time.strptime(date[:dot_loc], "%a %Y-%m-%d %H:%M:%S")
173
145
    fract_seconds, offset = date[dot_loc:].split()
174
146
    fract_seconds = float(fract_seconds)
186
158
if __name__ == '__main__':
187
159
    import doctest
188
160
    doctest.testmod()
189