~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to weavefile.py

  • Committer: Martin Pool
  • Date: 2005-06-30 06:54:45 UTC
  • mto: This revision was merged to the branch mainline in revision 852.
  • Revision ID: mbp@sourcefrog.net-20050630065445-0b45ffaa34801941
Go back to weave lines normally having newlines at the end. 

Lines without final newlines are now serialized as ',' lines rather
than '.'.

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
 
23
23
 
24
24
"""Store and retrieve weaves in files.
 
25
 
 
26
There is one format marker followed by a blank line, followed by a
 
27
series of version headers, followed by the weave itself.
 
28
 
 
29
Each version marker has 'v' and the version, then 'i' and the included
 
30
previous versions.
 
31
 
 
32
The weave is bracketed by 'w' and 'W' lines, and includes the '{}[]'
 
33
processing instructions.  Lines of text are prefixed by '.' if the
 
34
line contains a newline, or ',' if not.
25
35
"""
26
36
 
27
37
# TODO: When extracting a single version it'd be enough to just pass
39
49
 
40
50
    for version, verinfo in enumerate(weave._v):
41
51
        print >>f, 'v', version
42
 
        included = list(verinfo.included)
43
 
        included.sort()
44
 
        print >>f, 'i',
45
 
        for i in included:
46
 
            print >>f, i,
47
 
        print >>f
 
52
        if verinfo.included:
 
53
            included = list(verinfo.included)
 
54
            included.sort()
 
55
            assert included[0] >= 0
 
56
            assert included[-1] < version
 
57
            print >>f, 'i',
 
58
            for i in included:
 
59
                print >>f, i,
 
60
            print >>f
 
61
        else:
 
62
            print >>f, 'i'
48
63
        print >>f
49
64
 
50
65
    print >>f, 'w'
54
69
            assert len(l) == 2
55
70
            assert l[0] in '{}[]'
56
71
            print >>f, '%s %d' % l
57
 
        else:
58
 
            assert '\n' not in l
59
 
            print >>f, '.', l
 
72
        else: # text line
 
73
            if not l:
 
74
                print >>f, ', '
 
75
            elif l[-1] == '\n':
 
76
                assert '\n' not in l[:-1]
 
77
                print >>f, '.', l,
 
78
            else:
 
79
                print >>f, ',', l
60
80
 
61
81
    print >>f, 'W'
62
82
 
90
110
        if l == 'W\n':
91
111
            break
92
112
        elif l[:2] == '. ':
93
 
            w._l.append(l[2:-1])
 
113
            w._l.append(l[2:])           # include newline
 
114
        elif l[:2] == ', ':
 
115
            w._l.append(l[2:-1])        # exclude newline
94
116
        else:
95
117
            assert l[0] in '{}[]', l
96
118
            assert l[1] == ' ', l