Rev 478: Require rich root repositories. in file:///home/jelmer/bzr-svn/0.4/

Jelmer Vernooij jelmer at samba.org
Sun Jun 17 00:44:05 BST 2007


------------------------------------------------------------
revno: 478
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: 0.4
timestamp: Sun 2007-06-17 01:43:38 +0200
message:
  Require rich root repositories.
modified:
  branch.py
  checkout.py
  convert.py
  fetch.py
  format.py
  repository.py
  tests/test_convert.py
  tests/test_repos.py
  tests/test_upgrade.py
=== modified file 'branch.py'
--- a/branch.py	2007-06-15 19:58:45 +0000
+++ b/branch.py	2007-06-16 23:43:38 +0000
@@ -25,6 +25,7 @@
 import svn.client, svn.core
 
 from commit import push
+from format import get_rich_root_format
 from repository import SvnRepository
 from transport import bzr_to_svn_url, svn_config
 
@@ -71,7 +72,7 @@
 
     def _create_heavyweight_checkout(self, to_location, revision_id=None):
         checkout_branch = BzrDir.create_branch_convenience(
-            to_location, force_new_tree=False)
+            to_location, force_new_tree=False, format=get_rich_root_format())
         checkout = checkout_branch.bzrdir
         checkout_branch.bind(self)
         # pull up to the specified revision_id to set the initial 
@@ -278,7 +279,7 @@
         return False
 
     def sprout(self, to_bzrdir, revision_id=None):
-        result = BranchFormat.get_default_format().initialize(to_bzrdir)
+        result = to_bzrdir.create_branch()
         self.copy_content_into(result, revision_id=revision_id)
         return result
 

=== modified file 'checkout.py'
--- a/checkout.py	2007-06-01 13:30:34 +0000
+++ b/checkout.py	2007-06-16 23:43:38 +0000
@@ -50,6 +50,7 @@
 from svn.core import SubversionException, Pool
 
 from errors import NoCheckoutSupport
+from format import get_rich_root_format
 
 class WorkingTreeInconsistent(BzrError):
     _fmt = """Working copy is in inconsistent state (%(min_revnum)d:%(max_revnum)d)"""
@@ -683,7 +684,7 @@
                recurse='down'):
         # FIXME: honor force_new_repo
         # FIXME: Use recurse
-        result = BzrDirFormat.get_default_format().initialize(url)
+        result = get_rich_root_format().initialize(url)
         repo = self.find_repository()
         repo.clone(result, revision_id)
         branch = self.open_branch()
@@ -756,5 +757,5 @@
     def get_converter(self, format=None):
         """See BzrDirFormat.get_converter()."""
         if format is None:
-            format = BzrDirFormat.get_default_format()
+            format = get_rich_root_format()
         return SvnConverter(format)

=== modified file 'convert.py'
--- a/convert.py	2007-06-01 13:30:34 +0000
+++ b/convert.py	2007-06-16 23:43:38 +0000
@@ -30,6 +30,7 @@
 import bzrlib.urlutils as urlutils
 import bzrlib.ui as ui
 
+from format import get_rich_root_format
 from repository import SvnRepository
 
 import svn.core, svn.repos
@@ -89,7 +90,7 @@
             dirs[path] = BzrDir.open_from_transport(nt)
         except NotBranchError:
             transport_makedirs(to_transport, urlutils.join(to_transport.base, path))
-            dirs[path] = BzrDirFormat.get_default_format().initialize_on_transport(nt)
+            dirs[path] = get_rich_root_format().initialize_on_transport(nt)
         return dirs[path]
 
     try:

=== modified file 'fetch.py'
--- a/fetch.py	2007-06-01 13:30:34 +0000
+++ b/fetch.py	2007-06-16 23:43:38 +0000
@@ -136,9 +136,11 @@
     def close_directory(self, id):
         self.inventory[id].revision = self.revid
 
-        file_weave = self.weave_store.get_weave_or_empty(id, self.transact)
-        if not file_weave.has_version(self.revid):
-            file_weave.add_lines(self.revid, self.dir_baserev[id], [])
+        # Only record root if the target repository supports it
+        if self.target.supports_rich_root:
+            file_weave = self.weave_store.get_weave_or_empty(id, self.transact)
+            if not file_weave.has_version(self.revid):
+                file_weave.add_lines(self.revid, self.dir_baserev[id], [])
 
     def add_directory(self, path, parent_id, copyfrom_path, copyfrom_revnum, 
                       pool):
@@ -468,5 +470,6 @@
     def is_compatible(source, target):
         """Be compatible with SvnRepository."""
         # FIXME: Also check target uses VersionedFile
-        return isinstance(source, SvnRepository)
+        return isinstance(source, SvnRepository) and \
+                target.supports_rich_root()
 

=== modified file 'format.py'
--- a/format.py	2007-05-28 12:24:15 +0000
+++ b/format.py	2007-06-16 23:43:38 +0000
@@ -15,7 +15,7 @@
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 """Subversion BzrDir formats."""
 
-from bzrlib.bzrdir import BzrDirFormat, BzrDir
+from bzrlib.bzrdir import BzrDirFormat, BzrDir, format_registry
 from bzrlib.errors import (NotBranchError, NotLocalUrl, NoRepositoryPresent,
                            NoWorkingTree)
 from bzrlib.lockable_files import TransportLock
@@ -28,6 +28,16 @@
 from scheme import BranchingScheme
 from transport import SvnRaTransport, bzr_to_svn_url, get_svn_ra_transport
 
+def get_rich_root_format():
+    format = BzrDirFormat.get_default_format()
+    if format.repository_format.rich_root_data:
+        return format
+    # Default format does not support rich root data, 
+    # fall back to dirstate-with-subtree
+    format = format_registry.make_bzrdir('dirstate-with-subtree')
+    assert format.repository_format.rich_root_data
+    return format
+
 
 class SvnRemoteAccess(BzrDir):
     """BzrDir implementation for Subversion connections.
@@ -67,7 +77,8 @@
             recurse='down'):
         """See BzrDir.sprout()."""
         # FIXME: Use recurse
-        result = BzrDirFormat.get_default_format().initialize(url)
+        format = get_rich_root_format()
+        result = format.initialize(url)
         repo = self.find_repository()
         if force_new_repo:
             result_repo = repo.clone(result, revision_id)

=== modified file 'repository.py'
--- a/repository.py	2007-05-30 23:48:44 +0000
+++ b/repository.py	2007-06-16 23:43:38 +0000
@@ -121,7 +121,7 @@
 class SvnRepositoryFormat(RepositoryFormat):
     """Repository format for Subversion repositories (accessed using svn_ra).
     """
-    rich_root_data = False
+    rich_root_data = True
 
     def __init__(self):
         super(SvnRepositoryFormat, self).__init__()

=== modified file 'tests/test_convert.py'
--- a/tests/test_convert.py	2007-05-17 16:52:31 +0000
+++ b/tests/test_convert.py	2007-06-16 23:43:38 +0000
@@ -17,14 +17,15 @@
 """Full repository conversion tests."""
 
 from bzrlib.branch import Branch
-from bzrlib.bzrdir import BzrDir
-from bzrlib.errors import NotBranchError, NoSuchFile
+from bzrlib.bzrdir import BzrDir, format_registry
+from bzrlib.errors import NotBranchError, NoSuchFile, IncompatibleRepositories
 from bzrlib.repository import Repository
 from bzrlib.tests import TestCaseInTempDir
 from bzrlib.trace import mutter
 
 import os
 from convert import convert_repository, NotDumpFile, load_dumpfile
+from format import get_rich_root_format
 from repository import generate_svn_revision_id
 from scheme import TrunkBranchingScheme, NoBranchingScheme
 from tests import TestCaseWithSubversionRepository
@@ -115,7 +116,8 @@
         self.assertTrue(newrepos.has_revision(oldrepos.generate_revision_id(3, "branches/somebranch")))
 
     def test_shared_import_continue(self):
-        BzrDir.create_repository("e", shared=True)
+        BzrDir.create_repository("e", shared=True, 
+                format=get_rich_root_format())
 
         convert_repository("svn+"+self.repos_url, "e", 
                 TrunkBranchingScheme(), True)
@@ -139,13 +141,14 @@
                 TrunkBranchingScheme(), working_trees=True)
 
     def test_shared_import_nonescheme_empty(self):
-        BzrDir.create_repository("e", shared=True)
+        BzrDir.create_repository("e", shared=True, format=get_rich_root_format())
 
         convert_repository("svn+"+self.repos_url, "e", 
                 NoBranchingScheme(), True)
 
     def test_shared_import_with_wt(self):
-        BzrDir.create_repository("e", shared=True)
+        BzrDir.create_repository("e", shared=True, 
+                format=get_rich_root_format())
 
         convert_repository("svn+"+self.repos_url, "e", 
                 TrunkBranchingScheme(), True, True)
@@ -154,7 +157,8 @@
                         self.test_dir, "e", "trunk", "file")))
 
     def test_shared_import_without_wt(self):
-        BzrDir.create_repository("e", shared=True)
+        BzrDir.create_repository("e", shared=True, 
+                format=get_rich_root_format())
 
         convert_repository("svn+"+self.repos_url, "e", 
                 TrunkBranchingScheme(), True, False)
@@ -162,6 +166,14 @@
         self.assertFalse(os.path.isfile(os.path.join(
                         self.test_dir, "e", "trunk", "file")))
 
+    def test_shared_import_old_repos_fails(self):
+        BzrDir.create_repository("e", shared=True, 
+                format=format_registry.make_bzrdir('knit'))
+
+        self.assertRaises(IncompatibleRepositories, 
+            lambda: convert_repository("svn+"+self.repos_url, "e", 
+                TrunkBranchingScheme(), True, False))
+
     def test_shared_import_continue_branch(self):
         convert_repository("svn+"+self.repos_url, "e", 
                 TrunkBranchingScheme(), True)

=== modified file 'tests/test_repos.py'
--- a/tests/test_repos.py	2007-05-30 23:45:29 +0000
+++ b/tests/test_repos.py	2007-06-16 23:43:38 +0000
@@ -714,7 +714,8 @@
         self.client_commit("dc", "Second Message")
         repository = Repository.open("svn+%s" % repos_url)
 
-        to_repos = BzrDir.create_repository("e")
+        to_bzrdir = BzrDir.create("e", format.get_rich_root_format())
+        to_repos = to_bzrdir.create_repository()
 
         repository.copy_content_into(to_repos, 
                 repository.generate_revision_id(2, ""))
@@ -753,7 +754,7 @@
         self.client_commit("dc", "Msg")
 
         oldrepos = Repository.open(repos_url)
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format.get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
         self.assertEqual("bla", newrepos.get_inventory(
@@ -766,7 +767,7 @@
         self.client_commit("dc", "My Message")
         oldrepos = Repository.open(repos_url)
         oldrepos.set_branching_scheme(TrunkBranchingScheme(1))
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format.get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
 
@@ -777,7 +778,7 @@
         self.client_commit("dc", "My Message")
         oldrepos = Repository.open(repos_url)
         oldrepos.set_branching_scheme(TrunkBranchingScheme(1))
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format.get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
 
@@ -787,7 +788,7 @@
         self.client_add("dc/foo")
         self.client_commit("dc", "My Message")
         oldrepos = Repository.open(repos_url)
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format.get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
         self.client_delete("dc/foo/bla")
@@ -806,7 +807,7 @@
         self.client_add("dc/bar")
         self.client_commit("dc", "Second Message")
         oldrepos = Repository.open(repos_url)
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format.get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
         self.assertTrue(newrepos.has_revision(
@@ -839,7 +840,7 @@
 
         oldrepos = Repository.open("svn+"+repos_url)
         oldrepos.set_branching_scheme(TrunkBranchingScheme())
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format=format.get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
 
@@ -876,7 +877,7 @@
         self.client_add("dc/bla")
         self.client_commit("dc", "Second Message")
         oldrepos = Repository.open("svn+"+repos_url)
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format.get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
         self.assertTrue(newrepos.has_revision(
@@ -901,7 +902,7 @@
         self.client_commit("dc", "Third Message")
         oldrepos = Repository.open("svn+"+repos_url)
         oldrepos.set_branching_scheme(TrunkBranchingScheme())
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format.get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
 
@@ -986,7 +987,7 @@
 
         load_dumpfile("dumpfile", "old")
         oldrepos = Repository.open("old")
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format.get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
         self.assertTrue(newrepos.has_revision(
@@ -1126,7 +1127,7 @@
 
         load_dumpfile("dumpfile", "old")
         oldrepos = Repository.open("old")
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format.get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
         self.assertTrue(newrepos.has_revision(
@@ -1271,7 +1272,7 @@
 
         load_dumpfile("dumpfile", "old")
         oldrepos = Repository.open("old")
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format.get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
         self.assertTrue(newrepos.has_revision(
@@ -1450,7 +1451,7 @@
 
         load_dumpfile("dumpfile", "old")
         oldrepos = Repository.open("old")
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format.get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
         self.assertTrue(newrepos.has_revision(
@@ -1590,7 +1591,7 @@
 
         load_dumpfile("dumpfile", "old")
         oldrepos = Repository.open("old")
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format.get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
         self.assertTrue(newrepos.has_revision(
@@ -1752,7 +1753,7 @@
 
         load_dumpfile("dumpfile", "old")
         oldrepos = Repository.open("old")
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format.get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
         self.assertTrue(newrepos.has_revision(
@@ -1779,7 +1780,7 @@
 
         oldrepos = Repository.open(repos_url)
         oldrepos.set_branching_scheme(TrunkBranchingScheme())
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format.get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
 
@@ -1801,7 +1802,7 @@
 
         oldrepos = Repository.open(repos_url)
         oldrepos.set_branching_scheme(TrunkBranchingScheme())
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format.get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
 
@@ -1823,7 +1824,7 @@
 
         oldrepos = Repository.open(repos_url)
         oldrepos.set_branching_scheme(TrunkBranchingScheme())
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format.get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
 
@@ -1843,7 +1844,7 @@
 
         oldrepos = Repository.open(repos_url)
         oldrepos.set_branching_scheme(TrunkBranchingScheme())
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format.get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
 
@@ -1867,7 +1868,7 @@
 
         oldrepos = Repository.open(repos_url)
         oldrepos.set_branching_scheme(TrunkBranchingScheme())
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format.get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
 
@@ -1891,7 +1892,7 @@
 
         oldrepos = Repository.open(repos_url)
         oldrepos.set_branching_scheme(TrunkBranchingScheme())
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format.get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
 
@@ -1968,8 +1969,8 @@
         self.client_set_prop("dc/bla", "svn:executable", "*")
         self.client_commit("dc", "My Message")
         oldrepos = Repository.open("svn+"+repos_url)
-        dir1 = BzrDir.create("f")
-        dir2 = BzrDir.create("g")
+        dir1 = BzrDir.create("f",format.get_rich_root_format())
+        dir2 = BzrDir.create("g",format.get_rich_root_format())
         newrepos1 = dir1.create_repository()
         newrepos2 = dir2.create_repository()
         oldrepos.copy_content_into(newrepos1)
@@ -1989,7 +1990,7 @@
         self.client_set_prop("dc/blie", "svn:executable", "")
         self.client_commit("dc", "My Message")
         oldrepos = Repository.open("svn+"+repos_url)
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format.get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
         self.assertTrue(newrepos.has_revision(
@@ -2007,7 +2008,7 @@
         self.client_add("dc/mylink")
         self.client_commit("dc", "My Message")
         oldrepos = Repository.open("svn+"+repos_url)
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format.get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
         self.assertTrue(newrepos.has_revision(
@@ -2026,7 +2027,7 @@
         self.client_set_prop("dc/bla", "svn:executable", "*")
         self.client_commit("dc", "Make executable")
         oldrepos = Repository.open("svn+"+repos_url)
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format.get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
         self.assertTrue(newrepos.has_revision(
@@ -2047,7 +2048,7 @@
         self.client_set_prop("dc", "bzr:merge", "aghost\n")
         self.client_commit("dc", "My Message")
         oldrepos = Repository.open("svn+"+repos_url)
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format.get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
 
@@ -2061,7 +2062,7 @@
         self.client_set_prop("dc", "bzr:merge", "a ghost\n")
         self.client_commit("dc", "My Message")
         oldrepos = Repository.open("svn+"+repos_url)
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format.get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
 
@@ -2185,7 +2186,7 @@
 
         oldrepos = Repository.open("svn+"+repos_url)
         oldrepos.set_branching_scheme(TrunkBranchingScheme())
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format.get_rich_root_format())
         newrepos = dir.create_repository()
         copyrev = oldrepos.generate_revision_id(2, "branches/abranch")
         prevrev = oldrepos.generate_revision_id(3, "branches/abranch")

=== modified file 'tests/test_upgrade.py'
--- a/tests/test_upgrade.py	2007-05-17 16:52:31 +0000
+++ b/tests/test_upgrade.py	2007-06-16 23:43:38 +0000
@@ -22,6 +22,7 @@
 from bzrlib.tests import TestCase, TestCaseWithTransport
 
 from fileids import generate_svn_file_id
+from format import get_rich_root_format
 from repository import MAPPING_VERSION
 from tests import TestCaseWithSubversionRepository
 from upgrade import (change_revision_parent, upgrade_repository, upgrade_branch,
@@ -93,7 +94,7 @@
         self.client_commit("dc", "data")
 
         oldrepos = Repository.open(repos_url)
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format=get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
         dir.create_branch()
@@ -115,7 +116,7 @@
         self.client_commit("dc", "data")
 
         oldrepos = Repository.open(repos_url)
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format=get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
         dir.create_branch()
@@ -140,7 +141,7 @@
         self.client_commit("dc", "data")
 
         oldrepos = Repository.open(repos_url)
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f", format=get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
         dir.create_branch()
@@ -169,7 +170,7 @@
         self.client_commit("dc", "data")
 
         oldrepos = Repository.open(repos_url)
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format=get_rich_root_format())
         newrepos = dir.create_repository()
         oldrepos.copy_content_into(newrepos)
         dir.create_branch()
@@ -203,7 +204,7 @@
         self.client_commit("dc", "data")
 
         oldrepos = Repository.open(repos_url)
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format=get_rich_root_format())
         newrepos = dir.create_repository()
         dir.create_branch()
         wt = dir.create_workingtree()
@@ -237,7 +238,7 @@
         self.client_commit("dc", "data")
 
         oldrepos = Repository.open(repos_url)
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format=get_rich_root_format())
         newrepos = dir.create_repository()
         b = dir.create_branch()
         wt = dir.create_workingtree()
@@ -263,7 +264,7 @@
         self.client_commit("dc", "data")
 
         oldrepos = Repository.open(repos_url)
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format=get_rich_root_format())
         dir.create_repository()
         b = dir.create_branch()
         wt = dir.create_workingtree()
@@ -286,7 +287,7 @@
         self.client_commit("dc", "data")
 
         oldrepos = Repository.open(repos_url)
-        dir = BzrDir.create("f")
+        dir = BzrDir.create("f",format=get_rich_root_format())
         dir.create_repository()
         b = dir.create_branch()
         wt = dir.create_workingtree()




More information about the bazaar-commits mailing list