~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/weavefile.py

  • Committer: Martin Pool
  • Date: 2005-08-18 05:22:01 UTC
  • Revision ID: mbp@sourcefrog.net-20050818052201-54c5e07b377e2af8
- don't store redundant version number at end of insert blocks

This introduces a new weavefile version (v4); the code can't read old ones.

Show diffs side-by-side

added added

removed removed

Lines of Context:
36
36
"""
37
37
 
38
38
# TODO: When extracting a single version it'd be enough to just pass
39
 
# an iterator returning the weave lines...
 
39
# an iterator returning the weave lines...  We don't really need to
 
40
# deserialize it into memory.
40
41
 
41
 
FORMAT_1 = '# bzr weave file v3\n'
 
42
FORMAT_1 = '# bzr weave file v4\n'
42
43
 
43
44
 
44
45
def write_weave(weave, f, format=None):
45
46
    if format == None or format == 1:
46
 
        return write_weave_v1(weave, f)
 
47
        return write_weave_v4(weave, f)
47
48
    else:
48
49
        raise ValueError("unknown weave format %r" % format)
49
50
 
50
51
 
51
 
def write_weave_v1(weave, f):
 
52
def write_weave_v4(weave, f):
52
53
    """Write weave to file f."""
53
54
    print >>f, FORMAT_1,
54
55
 
70
71
    for l in weave._weave:
71
72
        if isinstance(l, tuple):
72
73
            assert l[0] in '{}[]'
73
 
            print >>f, '%s %d' % l
 
74
            if l[0] == '}':
 
75
                print >>f, '}'
 
76
            else:
 
77
                print >>f, '%s %d' % l
74
78
        else: # text line
75
79
            if not l:
76
80
                print >>f, ', '
86
90
 
87
91
 
88
92
def read_weave(f):
89
 
    return read_weave_v1(f)
90
 
 
91
 
 
92
 
def read_weave_v1(f):
 
93
    return read_weave_v4(f)
 
94
 
 
95
 
 
96
def read_weave_v4(f):
93
97
    from weave import Weave, WeaveFormatError
94
98
    w = Weave()
95
99
 
128
132
            w._weave.append(l[2:])  # include newline
129
133
        elif l.startswith(', '):
130
134
            w._weave.append(l[2:-1])        # exclude newline
 
135
        elif l == '}\n':
 
136
            w._weave.append(('}', None))
131
137
        else:
132
 
            assert l[0] in '{}[]', l
 
138
            assert l[0] in '{[]', l
133
139
            assert l[1] == ' ', l
134
140
            w._weave.append((intern(l[0]), int(l[2:])))
135
141