~bzr-pqm/bzr/bzr.dev

2255.7.83 by John Arbash Meinel
Update some obvious copyright headers to include 2007.
1
# Copyright (C) 2005, 2006, 2007 Canonical Ltd
2052.3.1 by John Arbash Meinel
Add tests to cleanup the copyright of all source files
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
1910.2.22 by Aaron Bentley
Make commits preserve root entry data
17
from bzrlib import cache_utf8, inventory, errors, xml5
18
19
20
class Serializer_v6(xml5.Serializer_v5):
2889.1.1 by Robert Collins
* The class ``bzrlib.repofmt.knitrepo.KnitRepository3`` has been folded into
21
    """This serialiser adds rich roots."""
1910.2.22 by Aaron Bentley
Make commits preserve root entry data
22
2100.3.2 by Aaron Bentley
Add tests for format 7, enforce number
23
    format_num = '6'
2817.2.1 by Robert Collins
* Inventory serialisation no longer double-sha's the content.
24
    root_id = None
2100.3.2 by Aaron Bentley
Add tests for format 7, enforce number
25
1910.2.22 by Aaron Bentley
Make commits preserve root entry data
26
    def _append_inventory_root(self, append, inv):
27
        """Append the inventory root to output."""
1910.2.23 by Aaron Bentley
Fix up test cases that manually construct inventories
28
        if inv.revision_id is not None:
2817.2.1 by Robert Collins
* Inventory serialisation no longer double-sha's the content.
29
            revid1 = ' revision_id="'
30
            revid2 = xml5._encode_and_escape(inv.revision_id)
31
        else:
32
            revid1 = ""
33
            revid2 = ""
34
        append('<inventory format="%s"%s%s>\n' % (
35
            self.format_num, revid1, revid2))
36
        append('<directory file_id="%s name="%s revision="%s />\n' % (
37
            xml5._encode_and_escape(inv.root.file_id),
38
            xml5._encode_and_escape(inv.root.name),
39
            xml5._encode_and_escape(inv.root.revision)))
1910.2.22 by Aaron Bentley
Make commits preserve root entry data
40
2889.1.1 by Robert Collins
* The class ``bzrlib.repofmt.knitrepo.KnitRepository3`` has been folded into
41
    def _check_revisions(self, inv):
42
        """Extension point for subclasses to check during serialisation.
43
44
        By default no checking is done.
45
46
        :param inv: An inventory about to be serialised, to be checked.
47
        :raises: AssertionError if an error has occured.
48
        """
49
        assert inv.revision_id is not None
50
        assert inv.root.revision is not None
51
52
    def _unpack_inventory(self, elt, revision_id=None):
1910.2.22 by Aaron Bentley
Make commits preserve root entry data
53
        """Construct from XML Element"""
1910.2.31 by Aaron Bentley
Fix bugs in basis inventory handling, change filename
54
        if elt.tag != 'inventory':
55
            raise errors.UnexpectedInventoryFormat('Root tag is %r' % elt.tag)
1910.2.22 by Aaron Bentley
Make commits preserve root entry data
56
        format = elt.get('format')
2100.3.2 by Aaron Bentley
Add tests for format 7, enforce number
57
        if format != self.format_num:
1910.2.31 by Aaron Bentley
Fix bugs in basis inventory handling, change filename
58
            raise errors.UnexpectedInventoryFormat('Invalid format version %r'
59
                                                   % format)
1910.2.22 by Aaron Bentley
Make commits preserve root entry data
60
        revision_id = elt.get('revision_id')
61
        if revision_id is not None:
2249.5.12 by John Arbash Meinel
Change the APIs for VersionedFile, Store, and some of Repository into utf-8
62
            revision_id = cache_utf8.encode(revision_id)
1910.2.22 by Aaron Bentley
Make commits preserve root entry data
63
        inv = inventory.Inventory(root_id=None, revision_id=revision_id)
64
        for e in elt:
2294.1.9 by John Arbash Meinel
Minor performance improvement, use None as signal rather than ROOT_ID
65
            ie = self._unpack_entry(e)
1910.2.22 by Aaron Bentley
Make commits preserve root entry data
66
            inv.add(ie)
2889.1.1 by Robert Collins
* The class ``bzrlib.repofmt.knitrepo.KnitRepository3`` has been folded into
67
        assert inv.root.revision is not None
1910.2.22 by Aaron Bentley
Make commits preserve root entry data
68
        return inv
69
70
71
serializer_v6 = Serializer_v6()