/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/xml8.py

  • Committer: Aaron Bentley
  • Date: 2008-03-28 03:09:47 UTC
  • mto: This revision was merged to the branch mainline in revision 3371.
  • Revision ID: aaron@aaronbentley.com-20080328030947-57cfqi7to7k401wc
Have xml5 inherit from xml6 from xml8

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005, 2006, 2007 Canonical Ltd
 
1
# Copyright (C) 2005, 2006, 2007, 2008 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
138
138
    _to_escaped_map.clear()
139
139
 
140
140
 
141
 
class Serializer_v5(Serializer):
142
 
    """Version 5 serializer
 
141
class Serializer_v8(Serializer):
 
142
    """This serialiser adds rich roots.
143
143
 
144
 
    Packs objects into XML and vice versa.
 
144
    Its revision format number matches its inventory number.
145
145
    """
146
 
    
 
146
 
147
147
    __slots__ = []
148
148
 
149
 
    root_id = ROOT_ID
 
149
    root_id = None
150
150
    support_altered_by_hack = True
151
151
    # This format supports the altered-by hack that reads file ids directly out
152
152
    # of the versionedfile, without doing XML parsing.
153
153
 
154
154
    supported_kinds = set(['file', 'directory', 'symlink'])
155
 
    format_num = '5'
 
155
    format_num = '8'
156
156
    revision_format_num = None
157
157
 
158
158
    def _check_revisions(self, inv):
163
163
        :param inv: An inventory about to be serialised, to be checked.
164
164
        :raises: AssertionError if an error has occured.
165
165
        """
 
166
        assert inv.revision_id is not None
 
167
        assert inv.root.revision is not None
166
168
 
167
169
    def write_inventory_to_lines(self, inv):
168
170
        """Return a list of lines with the encoded inventory."""
274
276
 
275
277
    def _append_inventory_root(self, append, inv):
276
278
        """Append the inventory root to output."""
277
 
        if inv.root.file_id not in (None, ROOT_ID):
278
 
            fileid1 = ' file_id="'
279
 
            fileid2 = _encode_and_escape(inv.root.file_id)
280
 
        else:
281
 
            fileid1 = ""
282
 
            fileid2 = ""
283
279
        if inv.revision_id is not None:
284
280
            revid1 = ' revision_id="'
285
281
            revid2 = _encode_and_escape(inv.revision_id)
286
282
        else:
287
283
            revid1 = ""
288
284
            revid2 = ""
289
 
        append('<inventory%s%s format="5"%s%s>\n' % (
290
 
            fileid1, fileid2, revid1, revid2))
291
 
        
 
285
        append('<inventory format="%s"%s%s>\n' % (
 
286
            self.format_num, revid1, revid2))
 
287
        append('<directory file_id="%s name="%s revision="%s />\n' % (
 
288
            _encode_and_escape(inv.root.file_id),
 
289
            _encode_and_escape(inv.root.name),
 
290
            _encode_and_escape(inv.root.revision)))
 
291
 
292
292
    def _pack_revision(self, rev):
293
293
        """Revision object -> xml tree"""
294
294
        # For the XML format, we need to write them as Unicode rather than as
340
340
            prop_elt.tail = '\n'
341
341
        top_elt.tail = '\n'
342
342
 
343
 
    def _unpack_inventory(self, elt, revision_id):
344
 
        """Construct from XML Element
345
 
        """
346
 
        assert elt.tag == 'inventory'
347
 
        root_id = elt.get('file_id') or ROOT_ID
348
 
        root_id = _get_utf8_or_ascii(root_id)
349
 
 
 
343
    def _unpack_inventory(self, elt, revision_id=None):
 
344
        """Construct from XML Element"""
 
345
        if elt.tag != 'inventory':
 
346
            raise errors.UnexpectedInventoryFormat('Root tag is %r' % elt.tag)
350
347
        format = elt.get('format')
351
 
        if format is not None:
352
 
            if format != '5':
353
 
                raise BzrError("invalid format version %r on inventory"
354
 
                                % format)
355
 
        data_revision_id = elt.get('revision_id')
356
 
        if data_revision_id is not None:
357
 
            revision_id = cache_utf8.encode(data_revision_id)
358
 
        inv = Inventory(root_id, revision_id=revision_id)
 
348
        if format != self.format_num:
 
349
            raise errors.UnexpectedInventoryFormat('Invalid format version %r'
 
350
                                                   % format)
 
351
        revision_id = elt.get('revision_id')
 
352
        if revision_id is not None:
 
353
            revision_id = cache_utf8.encode(revision_id)
 
354
        inv = inventory.Inventory(root_id=None, revision_id=revision_id)
359
355
        for e in elt:
360
356
            ie = self._unpack_entry(e)
361
 
            if ie.parent_id is None:
362
 
                ie.parent_id = root_id
363
357
            inv.add(ie)
364
 
        if revision_id is not None:
365
 
            inv.root.revision = revision_id
 
358
        assert inv.root.revision is not None
366
359
        return inv
367
360
 
368
361
    def _unpack_entry(self, elt):
456
449
            rev.properties[name] = value
457
450
 
458
451
 
459
 
serializer_v5 = Serializer_v5()
 
452
serializer_v8 = Serializer_v8()