~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to weavefile.py

  • Committer: Martin Pool
  • Date: 2005-07-01 03:24:23 UTC
  • mto: This revision was merged to the branch mainline in revision 852.
  • Revision ID: mbp@sourcefrog.net-20050701032423-e6c004adced0d82a
Remove redundant 'v' lines from weave file

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
There is one format marker followed by a blank line, followed by a
27
27
series of version headers, followed by the weave itself.
28
28
 
29
 
Each version marker has 'v' and the version, then 'i' and the included
30
 
previous versions, then '1' and the SHA-1 of the text, if known.  The
31
 
inclusions do not need to list versions included by a parent.
 
29
Each version marker has 'i' and the included previous versions, then
 
30
'1' and the SHA-1 of the text, if known.  The inclusions do not need
 
31
to list versions included by a parent.
32
32
 
33
33
The weave is bracketed by 'w' and 'W' lines, and includes the '{}[]'
34
34
processing instructions.  Lines of text are prefixed by '.' if the
38
38
# TODO: When extracting a single version it'd be enough to just pass
39
39
# an iterator returning the weave lines...
40
40
 
41
 
FORMAT_1 = '# bzr weave file v2\n'
 
41
FORMAT_1 = '# bzr weave file v3\n'
42
42
 
43
43
 
44
44
def write_weave(weave, f, format=None):
53
53
    print >>f, FORMAT_1,
54
54
 
55
55
    for version, included in enumerate(weave._v):
56
 
        print >>f, 'v', version
57
56
        if included:
58
57
            # find a minimal expression of it; bias towards using
59
58
            # later revisions
113
112
    if l != FORMAT_1:
114
113
        raise WeaveFormatError('invalid weave file header: %r' % l)
115
114
 
116
 
    v_cnt = 0
 
115
    ver = 0
117
116
    while True:
118
117
        l = f.readline()
119
 
        if l.startswith('v '):
120
 
            ver = int(l[2:])
121
 
            if ver != v_cnt:
122
 
                raise WeaveFormatError('version %d!=%d out of order'
123
 
                                       % (ver, v_cnt))
124
 
            v_cnt += 1
125
 
            
126
 
            l = f.readline()[:-1]
127
 
            if l[0] != 'i':
128
 
                raise WeaveFormatError('unexpected line %r' % l)
 
118
        if l[0] == 'i':
 
119
            ver += 1
 
120
 
129
121
            if len(l) > 2:
130
122
                included = map(int, l[2:].split(' '))
131
123
                full = set()