~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/xml5.py

  • Committer: Martin Pool
  • Date: 2005-09-12 09:50:44 UTC
  • Revision ID: mbp@sourcefrog.net-20050912095044-6acfdb5611729987
- no tests in bzrlib.fetch anymore

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
 
18
18
from bzrlib.xml import ElementTree, SubElement, Element, Serializer
19
19
from bzrlib.inventory import ROOT_ID, Inventory, InventoryEntry
20
 
import bzrlib.inventory as inventory
21
 
from bzrlib.revision import Revision        
 
20
from bzrlib.revision import Revision, RevisionReference        
22
21
from bzrlib.errors import BzrError
23
22
 
24
23
 
46
45
 
47
46
    def _pack_entry(self, ie):
48
47
        """Convert InventoryEntry to XML element"""
49
 
        if not InventoryEntry.versionable_kind(ie.kind):
50
 
            raise AssertionError('unsupported entry kind %s' % ie.kind)
 
48
        assert ie.kind == 'directory' or ie.kind == 'file'
51
49
        e = Element(ie.kind)
52
50
        e.set('name', ie.name)
53
51
        e.set('file_id', ie.file_id)
55
53
        if ie.text_size != None:
56
54
            e.set('text_size', '%d' % ie.text_size)
57
55
 
58
 
        for f in ['text_sha1', 'revision', 'symlink_target']:
 
56
        for f in ['text_version', 'text_sha1', 'entry_version']:
59
57
            v = getattr(ie, f)
60
58
            if v != None:
61
59
                e.set(f, v)
62
60
 
63
 
        if ie.executable:
64
 
            e.set('executable', 'yes')
65
 
 
66
61
        # to be conservative, we don't externalize the root pointers
67
62
        # for now, leaving them as null in the xml form.  in a future
68
63
        # version it will be implied by nested elements.
91
86
        msg.text = rev.message
92
87
        msg.tail = '\n'
93
88
 
94
 
        if rev.parent_ids:
 
89
        if rev.parents:
95
90
            pelts = SubElement(root, 'parents')
96
91
            pelts.tail = pelts.text = '\n'
97
 
            for parent_id in rev.parent_ids:
98
 
                assert isinstance(parent_id, basestring)
 
92
            for rr in rev.parents:
 
93
                assert isinstance(rr, RevisionReference)
99
94
                p = SubElement(pelts, 'revision_ref')
100
95
                p.tail = '\n'
101
 
                p.set('revision_id', parent_id)
 
96
                assert rr.revision_id
 
97
                p.set('revision_id', rr.revision_id)
 
98
 
102
99
        return root
103
100
 
104
101
    
119
116
 
120
117
    def _unpack_entry(self, elt):
121
118
        kind = elt.tag
122
 
        if not InventoryEntry.versionable_kind(kind):
123
 
            raise AssertionError('unsupported entry kind %s' % kind)
 
119
        assert kind == 'directory' or kind == 'file'
124
120
 
125
121
        parent_id = elt.get('parent_id')
126
122
        if parent_id == None:
127
123
            parent_id = ROOT_ID
128
124
 
129
 
        if kind == 'directory':
130
 
            ie = inventory.InventoryDirectory(elt.get('file_id'),
131
 
                                              elt.get('name'),
132
 
                                              parent_id)
133
 
        elif kind == 'file':
134
 
            ie = inventory.InventoryFile(elt.get('file_id'),
135
 
                                         elt.get('name'),
136
 
                                         parent_id)
137
 
            ie.text_sha1 = elt.get('text_sha1')
138
 
            if elt.get('executable') == 'yes':
139
 
                ie.executable = True
140
 
            v = elt.get('text_size')
141
 
            ie.text_size = v and int(v)
142
 
        elif kind == 'symlink':
143
 
            ie = inventory.InventoryLink(elt.get('file_id'),
144
 
                                         elt.get('name'),
145
 
                                         parent_id)
146
 
            ie.symlink_target = elt.get('symlink_target')
147
 
        else:
148
 
            raise BzrError("unknown kind %r" % kind)
149
 
        ie.revision = elt.get('revision')
 
125
        ie = InventoryEntry(elt.get('file_id'),
 
126
                            elt.get('name'),
 
127
                            kind,
 
128
                            parent_id)
 
129
        ie.text_version = elt.get('text_version')
 
130
        ie.entry_version = elt.get('entry_version')
 
131
        ie.text_sha1 = elt.get('text_sha1')
 
132
        v = elt.get('text_size')
 
133
        ie.text_size = v and int(v)
150
134
 
151
135
        return ie
152
136
 
165
149
        for p in parents:
166
150
            assert p.tag == 'revision_ref', \
167
151
                   "bad parent node tag %r" % p.tag
168
 
            rev.parent_ids.append(p.get('revision_id'))
 
152
            rev_ref = RevisionReference(p.get('revision_id'))
 
153
            rev.parents.append(rev_ref)
169
154
 
170
155
        v = elt.get('timezone')
171
156
        rev.timezone = v and int(v)