~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/xml5.py

 * The internal storage of history, and logical branch identity have now
   been split into Branch, and Repository. The common locking and file 
   management routines are now in bzrlib.lockablefiles. 
   (Aaron Bentley, Robert Collins, Martin Pool)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#! /usr/bin/env python
2
 
 
3
1
# This program is free software; you can redistribute it and/or modify
4
2
# it under the terms of the GNU General Public License as published by
5
3
# the Free Software Foundation; either version 2 of the License, or
15
13
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
14
 
17
15
 
18
 
from bzrlib.xml import ElementTree, SubElement, Element, Serializer
 
16
from bzrlib.xml_serializer import ElementTree, SubElement, Element, Serializer
19
17
from bzrlib.inventory import ROOT_ID, Inventory, InventoryEntry
20
18
import bzrlib.inventory as inventory
21
19
from bzrlib.revision import Revision        
22
20
from bzrlib.errors import BzrError
23
21
 
24
22
 
25
 
 
26
 
 
27
 
 
28
23
class Serializer_v5(Serializer):
29
24
    """Version 5 serializer
30
25
 
99
94
                p = SubElement(pelts, 'revision_ref')
100
95
                p.tail = '\n'
101
96
                p.set('revision_id', parent_id)
 
97
        if rev.properties:
 
98
            self._pack_revision_properties(rev, root)
102
99
        return root
103
 
    
 
100
 
 
101
 
 
102
    def _pack_revision_properties(self, rev, under_element):
 
103
        top_elt = SubElement(under_element, 'properties')
 
104
        for prop_name, prop_value in sorted(rev.properties.items()):
 
105
            assert isinstance(prop_name, basestring) 
 
106
            assert isinstance(prop_value, basestring) 
 
107
            prop_elt = SubElement(top_elt, 'property')
 
108
            prop_elt.set('name', prop_name)
 
109
            prop_elt.text = prop_value
 
110
            prop_elt.tail = '\n'
 
111
        top_elt.tail = '\n'
 
112
 
104
113
 
105
114
    def _unpack_inventory(self, elt):
106
115
        """Construct from XML Element
173
182
            assert p.tag == 'revision_ref', \
174
183
                   "bad parent node tag %r" % p.tag
175
184
            rev.parent_ids.append(p.get('revision_id'))
176
 
 
 
185
        self._unpack_revision_properties(elt, rev)
177
186
        v = elt.get('timezone')
178
187
        rev.timezone = v and int(v)
179
 
 
180
188
        rev.message = elt.findtext('message') # text of <message>
181
189
        return rev
182
190
 
183
191
 
 
192
    def _unpack_revision_properties(self, elt, rev):
 
193
        """Unpack properties onto a revision."""
 
194
        props_elt = elt.find('properties')
 
195
        assert len(rev.properties) == 0
 
196
        if not props_elt:
 
197
            return
 
198
        for prop_elt in props_elt:
 
199
            assert prop_elt.tag == 'property', \
 
200
                "bad tag under properties list: %r" % p.tag
 
201
            name = prop_elt.get('name')
 
202
            value = prop_elt.text
 
203
            assert name not in rev.properties, \
 
204
                "repeated property %r" % p.name
 
205
            rev.properties[name] = value
 
206
 
 
207
 
184
208
serializer_v5 = Serializer_v5()