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