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