~bzr-pqm/bzr/bzr.dev

2052.3.2 by John Arbash Meinel
Change Copyright .. by Canonical to Copyright ... Canonical
1
# Copyright (C) 2006 Canonical Ltd
1910.2.64 by Aaron Bentley
Changes from review
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.51 by Aaron Bentley
Bundles now corrupt repositories
17
from bzrlib.bundle.serializer import BUNDLE_HEADER
1910.2.55 by Aaron Bentley
Bundle 0.9 uses Testament 3 strict
18
from bzrlib.bundle.serializer.v08 import BundleSerializerV08, BundleReader
1910.2.64 by Aaron Bentley
Changes from review
19
from bzrlib.testament import StrictTestament3
1910.2.55 by Aaron Bentley
Bundle 0.9 uses Testament 3 strict
20
from bzrlib.bundle.bundle_data import BundleInfo
1910.2.50 by Aaron Bentley
start work on format 0.9 serializer
21
1910.2.62 by Aaron Bentley
Cleanups
22
1910.2.64 by Aaron Bentley
Changes from review
23
"""Serializer for bundle format 0.9"""
24
25
1910.2.50 by Aaron Bentley
start work on format 0.9 serializer
26
class BundleSerializerV09(BundleSerializerV08):
1910.2.62 by Aaron Bentley
Cleanups
27
    """Serializer for bzr bundle format 0.9
28
    
29
    This format supports rich root data, for the nested-trees work, but also
30
    supports repositories that don't have rich root data.  It cannot be
31
    used to transfer from a knit2 repo into a knit1 repo, because that would
32
    be lossy.
33
    """
1910.2.50 by Aaron Bentley
start work on format 0.9 serializer
34
35
    def check_compatible(self):
36
        pass
1910.2.51 by Aaron Bentley
Bundles now corrupt repositories
37
38
    def _write_main_header(self):
39
        """Write the header for the changes"""
40
        f = self.to_file
1910.2.64 by Aaron Bentley
Changes from review
41
        f.write(BUNDLE_HEADER + '0.9\n#\n')
1910.2.51 by Aaron Bentley
Bundles now corrupt repositories
42
1910.2.55 by Aaron Bentley
Bundle 0.9 uses Testament 3 strict
43
    def _testament_sha1(self, revision_id):
1910.2.64 by Aaron Bentley
Changes from review
44
        return StrictTestament3.from_revision(self.source, 
1910.2.55 by Aaron Bentley
Bundle 0.9 uses Testament 3 strict
45
                                              revision_id).as_sha1()
46
47
    def read(self, f):
48
        """Read the rest of the bundles from the supplied file.
49
50
        :param f: The file to read from
51
        :return: A list of bundles
52
        """
53
        return BundleReaderV09(f).info
54
55
56
class BundleInfo09(BundleInfo):
1910.2.64 by Aaron Bentley
Changes from review
57
    """BundleInfo that uses StrictTestament3
1910.2.62 by Aaron Bentley
Cleanups
58
    
59
    This means that the root data is included in the testament.
60
    """
1910.2.55 by Aaron Bentley
Bundle 0.9 uses Testament 3 strict
61
62
    def _testament_sha1_from_revision(self, repository, revision_id):
1910.2.64 by Aaron Bentley
Changes from review
63
        testament = StrictTestament3.from_revision(repository, revision_id)
1910.2.55 by Aaron Bentley
Bundle 0.9 uses Testament 3 strict
64
        return testament.as_sha1()
65
66
    def _testament_sha1(self, revision, inventory):
1910.2.64 by Aaron Bentley
Changes from review
67
        return StrictTestament3(revision, inventory).as_sha1()
1910.2.55 by Aaron Bentley
Bundle 0.9 uses Testament 3 strict
68
1910.2.56 by Aaron Bentley
More work on bundles
69
1910.2.55 by Aaron Bentley
Bundle 0.9 uses Testament 3 strict
70
class BundleReaderV09(BundleReader):
1910.2.62 by Aaron Bentley
Cleanups
71
    """BundleReader for 0.9 bundles"""
1910.2.55 by Aaron Bentley
Bundle 0.9 uses Testament 3 strict
72
    
73
    def _get_info(self):
74
        return BundleInfo09()