Rev 2650: Knit1 disk layout specified. in http://people.ubuntu.com/~robertc/baz2.0/repository

Robert Collins robertc at robertcollins.net
Sat Jul 14 12:57:20 BST 2007


At http://people.ubuntu.com/~robertc/baz2.0/repository

------------------------------------------------------------
revno: 2650
revision-id: robertc at robertcollins.net-20070714115718-fzm3pbexhtz1cxxa
parent: robertc at robertcollins.net-20070714103927-p6bdl0v53vahje1r
committer: Robert Collins <robertc at robertcollins.net>
branch nick: repository
timestamp: Sat 2007-07-14 21:57:18 +1000
message:
  Knit1 disk layout specified.
modified:
  bzrlib/repofmt/knitrepo.py     knitrepo.py-20070206081537-pyy4a00xdas0j4pf-1
  bzrlib/tests/test_repository.py test_repository.py-20060131075918-65c555b881612f4d
=== modified file 'bzrlib/repofmt/knitrepo.py'
--- a/bzrlib/repofmt/knitrepo.py	2007-07-14 08:51:20 +0000
+++ b/bzrlib/repofmt/knitrepo.py	2007-07-14 11:57:18 +0000
@@ -14,6 +14,12 @@
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
+from bzrlib.lazy_import import lazy_import
+lazy_import(globals(), """
+from bzrlib import (
+        file_collection,
+        )
+""")
 from bzrlib import (
     bzrdir,
     deprecated_graph,
@@ -514,6 +520,27 @@
     def check_conversion_target(self, target_format):
         pass
 
+    def initialize(self, a_bzrdir, shared=False):
+        """Create an experimental repository.
+
+        :param a_bzrdir: bzrdir to contain the new repository; must already
+            be initialized.
+        :param shared: If true the repository will be initialized as a shared
+                       repository.
+        """
+        # setup a basic Knit1 repository.
+        result = RepositoryFormatKnit.initialize(self, a_bzrdir, shared)
+        # and adapt it to a GraphKnit repo
+        mutter('changing to GraphKnit1 repository in %s.', a_bzrdir.transport.base)
+        repo_transport = a_bzrdir.get_repository_transport(None)
+        repo_transport.mkdir('revision-indices')
+        collection = file_collection.FileCollection(
+            repo_transport.clone('revision-indices'), 'index')
+        collection.initialise()
+        collection.save()
+        repo_transport.delete('revisions.kndx')
+        return self.open(a_bzrdir=a_bzrdir, _found=True)
+
 
 class RepositoryFormatGraphKnit3(RepositoryFormatKnit3):
     """Experimental repository with knit3 style data.

=== modified file 'bzrlib/tests/test_repository.py'
--- a/bzrlib/tests/test_repository.py	2007-05-18 11:42:33 +0000
+++ b/bzrlib/tests/test_repository.py	2007-07-14 11:57:18 +0000
@@ -34,6 +34,7 @@
                            UnknownFormatError,
                            UnsupportedFormatError,
                            )
+from bzrlib.file_collection import FileCollection
 from bzrlib.repository import RepositoryFormat
 from bzrlib.tests import TestCase, TestCaseWithTransport
 from bzrlib.transport import get_transport
@@ -494,3 +495,98 @@
         revision_tree = tree.branch.repository.revision_tree('dull2')
         self.assertEqual('dull', revision_tree.inventory.root.revision)
 
+
+class TestExperimentalNoSubtrees(TestCaseWithTransport):
+
+    def get_format(self):
+        return bzrdir.format_registry.make_bzrdir('experimental')
+
+    def test_disk_layout(self):
+        format = self.get_format()
+        repo =self.make_repository('.', format=format)
+        # in case of side effects of locking.
+        repo.lock_write()
+        repo.unlock()
+        # we want:
+        # format 'Bazaar Experimental'
+        # lock: is a directory
+        # inventory.weave == empty_weave
+        # empty revision-store directory
+        # empty weaves directory
+        t = repo.bzrdir.get_repository_transport(None)
+        self.check_format(t)
+        # XXX: no locks left when unlocked at the moment
+        # self.assertEqualDiff('', t.get('lock').read())
+        self.assertTrue(S_ISDIR(t.stat('knits').st_mode))
+        self.check_databases(t)
+
+    def check_format(self, t):
+        self.assertEqualDiff('Bazaar Experimental no-subtrees\n',
+                             t.get('format').read())
+
+    def assertHasKndx(self, t, knit_name):
+        """Assert that knit_name exists on t."""
+        self.assertEqualDiff('# bzr knit index 8\n',
+                             t.get(knit_name + '.kndx').read())
+
+    def assertHasNoKndx(self, t, knit_name):
+        """Assert that knit_name has no index on t."""
+        self.assertFalse(t.has(knit_name + '.kndx'))
+
+    def assertHasKnit(self, t, knit_name):
+        """Assert that knit_name exists on t."""
+        # no default content
+        self.assertTrue(t.has(knit_name + '.knit'))
+
+    def check_databases(self, t):
+        """check knit content for a repository."""
+        self.assertHasKndx(t, 'inventory')
+        self.assertHasKnit(t, 'inventory')
+        self.assertHasKnit(t, 'revisions')
+        self.assertHasNoKndx(t, 'revisions')
+        self.assertHasKndx(t, 'signatures')
+        self.assertHasKnit(t, 'signatures')
+        # revision-indexes file-container directory
+        collection = FileCollection(t.clone('revision-indices'), 'index')
+        collection.load()
+        self.assertEqual(set(), collection.names())
+
+    def test_shared_disk_layout(self):
+        format = self.get_format()
+        repo =self.make_repository('.', shared=True, format=format)
+        # we want:
+        # format 'Bazaar-NG Knit Repository Format 1'
+        # lock: is a directory
+        # inventory.weave == empty_weave
+        # empty revision-store directory
+        # empty weaves directory
+        # a 'shared-storage' marker file.
+        t = repo.bzrdir.get_repository_transport(None)
+        self.check_format(t)
+        # XXX: no locks left when unlocked at the moment
+        # self.assertEqualDiff('', t.get('lock').read())
+        self.assertEqualDiff('', t.get('shared-storage').read())
+        self.assertTrue(S_ISDIR(t.stat('knits').st_mode))
+        self.check_databases(t)
+
+    def test_shared_no_tree_disk_layout(self):
+        format = self.get_format()
+        repo =self.make_repository('.', shared=True, format=format)
+        repo.set_make_working_trees(False)
+        # we want:
+        # format 'Bazaar-NG Knit Repository Format 1'
+        # lock ''
+        # inventory.weave == empty_weave
+        # empty revision-store directory
+        # empty weaves directory
+        # a 'shared-storage' marker file.
+        t = repo.bzrdir.get_repository_transport(None)
+        self.check_format(t)
+        # XXX: no locks left when unlocked at the moment
+        # self.assertEqualDiff('', t.get('lock').read())
+        self.assertEqualDiff('', t.get('shared-storage').read())
+        self.assertEqualDiff('', t.get('no-working-trees').read())
+        repo.set_make_working_trees(True)
+        self.assertFalse(t.has('no-working-trees'))
+        self.assertTrue(S_ISDIR(t.stat('knits').st_mode))
+        self.check_databases(t)




More information about the bazaar-commits mailing list