~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/repository.py

Merge from bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
33
33
from bzrlib.store.versioned import VersionedFileStore, WeaveStore
34
34
from bzrlib.store.text import TextStore
35
35
from bzrlib.symbol_versioning import *
36
 
from bzrlib.trace import mutter
 
36
from bzrlib.trace import mutter, note
37
37
from bzrlib.tree import RevisionTree
38
38
from bzrlib.tsort import topo_sort
39
39
from bzrlib.testament import Testament
96
96
            else:
97
97
                # yes, this is not suitable for adding with ghosts.
98
98
                self.add_inventory(rev_id, inv, rev.parent_ids)
99
 
        self._revision_store.add_revision(rev, self.get_transaction())   
 
99
        self._revision_store.add_revision(rev, self.get_transaction())
100
100
 
101
101
    @needs_read_lock
102
102
    def _all_possible_ids(self):
143
143
        getting file texts, inventories and revisions, then
144
144
        this construct will accept instances of those things.
145
145
        """
146
 
        object.__init__(self)
 
146
        super(Repository, self).__init__()
147
147
        self._format = _format
148
148
        # the following are part of the public API for Repository:
149
149
        self.bzrdir = a_bzrdir
156
156
        # 
157
157
        self.control_store = control_store
158
158
        self.control_weaves = control_store
 
159
        # TODO: make sure to construct the right store classes, etc, depending
 
160
        # on whether escaping is required.
159
161
 
160
162
    def lock_write(self):
161
163
        self.control_files.lock_write()
873
875
        """
874
876
        raise NotImplementedError(self.get_format_string)
875
877
 
 
878
    def get_format_description(self):
 
879
        """Return the short desciption for this format."""
 
880
        raise NotImplementedError(self.get_format_description)
 
881
 
876
882
    def _get_revision_store(self, repo_transport, control_files):
877
883
        """Return the revision store object for this a_bzrdir."""
878
884
        raise NotImplementedError(self._get_revision_store)
905
911
                                  transport,
906
912
                                  control_files,
907
913
                                  prefixed=True,
908
 
                                  versionedfile_class=WeaveFile):
 
914
                                  versionedfile_class=WeaveFile,
 
915
                                  escaped=False):
909
916
        weave_transport = control_files._transport.clone(name)
910
917
        dir_mode = control_files._dir_mode
911
918
        file_mode = control_files._file_mode
912
919
        return VersionedFileStore(weave_transport, prefixed=prefixed,
913
 
                                dir_mode=dir_mode,
914
 
                                file_mode=file_mode,
915
 
                                versionedfile_class=versionedfile_class)
 
920
                                  dir_mode=dir_mode,
 
921
                                  file_mode=file_mode,
 
922
                                  versionedfile_class=versionedfile_class,
 
923
                                  escaped=escaped)
916
924
 
917
925
    def initialize(self, a_bzrdir, shared=False):
918
926
        """Initialize a repository of this format in a_bzrdir.
1043
1051
        super(RepositoryFormat4, self).__init__()
1044
1052
        self._matchingbzrdir = bzrlib.bzrdir.BzrDirFormat4()
1045
1053
 
 
1054
    def get_format_description(self):
 
1055
        """See RepositoryFormat.get_format_description()."""
 
1056
        return "Repository format 4"
 
1057
 
1046
1058
    def initialize(self, url, shared=False, _internal=False):
1047
1059
        """Format 4 branches cannot be created."""
1048
1060
        raise errors.UninitializableFormat(self)
1088
1100
        super(RepositoryFormat5, self).__init__()
1089
1101
        self._matchingbzrdir = bzrlib.bzrdir.BzrDirFormat5()
1090
1102
 
 
1103
    def get_format_description(self):
 
1104
        """See RepositoryFormat.get_format_description()."""
 
1105
        return "Weave repository format 5"
 
1106
 
1091
1107
    def _get_revision_store(self, repo_transport, control_files):
1092
1108
        """See RepositoryFormat._get_revision_store()."""
1093
1109
        """Return the revision store object for this a_bzrdir."""
1114
1130
        super(RepositoryFormat6, self).__init__()
1115
1131
        self._matchingbzrdir = bzrlib.bzrdir.BzrDirFormat6()
1116
1132
 
 
1133
    def get_format_description(self):
 
1134
        """See RepositoryFormat.get_format_description()."""
 
1135
        return "Weave repository format 6"
 
1136
 
1117
1137
    def _get_revision_store(self, repo_transport, control_files):
1118
1138
        """See RepositoryFormat._get_revision_store()."""
1119
1139
        return self._get_text_rev_store(repo_transport,
1183
1203
        """See RepositoryFormat.get_format_string()."""
1184
1204
        return "Bazaar-NG Repository format 7"
1185
1205
 
 
1206
    def get_format_description(self):
 
1207
        """See RepositoryFormat.get_format_description()."""
 
1208
        return "Weave repository format 7"
 
1209
 
1186
1210
    def _get_revision_store(self, repo_transport, control_files):
1187
1211
        """See RepositoryFormat._get_revision_store()."""
1188
1212
        return self._get_text_rev_store(repo_transport,
1259
1283
     - an optional 'shared-storage' flag
1260
1284
     - an optional 'no-working-trees' flag
1261
1285
     - a LockDir lock
 
1286
 
 
1287
    This format was introduced in bzr 0.8.
1262
1288
    """
1263
1289
 
1264
1290
    def _get_control_store(self, repo_transport, control_files):
1275
1301
        """See RepositoryFormat.get_format_string()."""
1276
1302
        return "Bazaar-NG Knit Repository Format 1"
1277
1303
 
 
1304
    def get_format_description(self):
 
1305
        """See RepositoryFormat.get_format_description()."""
 
1306
        return "Knit repository format 1"
 
1307
 
1278
1308
    def _get_revision_store(self, repo_transport, control_files):
1279
1309
        """See RepositoryFormat._get_revision_store()."""
1280
1310
        from bzrlib.store.revision.knit import KnitRevisionStore
1281
1311
        versioned_file_store = VersionedFileStore(
1282
1312
            repo_transport,
1283
 
            file_mode = control_files._file_mode,
 
1313
            file_mode=control_files._file_mode,
1284
1314
            prefixed=False,
1285
1315
            precious=True,
1286
1316
            versionedfile_class=KnitVersionedFile,
1287
 
            versionedfile_kwargs={'delta':False, 'factory':KnitPlainFactory()})
 
1317
            versionedfile_kwargs={'delta':False, 'factory':KnitPlainFactory()},
 
1318
            escaped=True,
 
1319
            )
1288
1320
        return KnitRevisionStore(versioned_file_store)
1289
1321
 
1290
1322
    def _get_text_store(self, transport, control_files):
1292
1324
        return self._get_versioned_file_store('knits',
1293
1325
                                              transport,
1294
1326
                                              control_files,
1295
 
                                              versionedfile_class=KnitVersionedFile)
 
1327
                                              versionedfile_class=KnitVersionedFile,
 
1328
                                              escaped=True)
1296
1329
 
1297
1330
    def initialize(self, a_bzrdir, shared=False):
1298
1331
        """Create a knit format 1 repository.
1299
1332
 
 
1333
        :param a_bzrdir: bzrdir to contain the new repository; must already
 
1334
            be initialized.
1300
1335
        :param shared: If true the repository will be initialized as a shared
1301
1336
                       repository.
1302
 
        XXX NOTE that this current uses a Weave for testing and will become 
1303
 
            A Knit in due course.
1304
1337
        """
1305
 
        from bzrlib.weavefile import write_weave_v5
1306
 
        from bzrlib.weave import Weave
1307
 
 
1308
 
        # Create an empty weave
1309
 
        sio = StringIO()
1310
 
        bzrlib.weavefile.write_weave_v5(Weave(), sio)
1311
 
        empty_weave = sio.getvalue()
1312
 
 
1313
1338
        mutter('creating repository in %s.', a_bzrdir.transport.base)
1314
 
        dirs = ['revision-store', 'knits', 'control']
1315
 
        files = [('control/inventory.weave', StringIO(empty_weave)), 
1316
 
                 ]
 
1339
        dirs = ['revision-store', 'knits']
 
1340
        files = []
1317
1341
        utf8_files = [('format', self.get_format_string())]
1318
1342
        
1319
1343
        self._upload_blank_content(a_bzrdir, dirs, files, utf8_files, shared)