Rev 1802: More test fixes, add repository to Layout.get_{branches, tags} arguments. in file:///data/jelmer/bzr-svn/trunk/

Jelmer Vernooij jelmer at samba.org
Thu Sep 4 11:15:17 BST 2008


At file:///data/jelmer/bzr-svn/trunk/

------------------------------------------------------------
revno: 1802
revision-id: jelmer at samba.org-20080904101515-u0ocn12dye7awxrr
parent: jelmer at samba.org-20080904094003-4tdx6l5fnhve6dip
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: trunk
timestamp: Thu 2008-09-04 12:15:15 +0200
message:
  More test fixes, add repository to Layout.get_{branches,tags} arguments.
modified:
  __init__.py                    __init__.py-20051008155114-eae558e6cf149e1d
  convert.py                     svn2bzr.py-20051018015439-cb4563bff29e632d
  layout.py                      layout.py-20080323165407-y9qw8nx4oykvoe1k-1
  mapping3/__init__.py           __init__.py-20080502174630-9324zh25kka98vlw-1
  mapping3/scheme.py             scheme.py-20060516195850-95181aae6b272f9e
  tests/mapping_implementations/test_repository.py test_repository.py-20080902013845-ity7d1ymye69sobm-2
  tests/test_fileids.py          test_fileids.py-20060622131341-19gyrlgqy8yl2od5-1
=== modified file '__init__.py'
--- a/__init__.py	2008-09-04 08:54:40 +0000
+++ b/__init__.py	2008-09-04 10:15:15 +0000
@@ -189,19 +189,19 @@
     InterRepository.register_optimiser(commit.InterToSvnRepository)
 
 
-def get_scheme(schemename):
-    """Parse scheme identifier and return a branching scheme.
+def get_layout(layoutname):
+    """Parse layout name and return a layout.
     
-    :param schemename: Name of the scheme to retrieve.
+    :param layout: Name of the layout to retrieve.
     """
-    if isinstance(schemename, unicode):
-        schemename = schemename.encode("ascii")
-    from bzrlib.plugins.svn.mapping3.scheme import BranchingScheme
+    if isinstance(layoutname, unicode):
+        layoutname = layoutname.encode("ascii")
+    from bzrlib.plugins.svn.layout import layout_registry
     from bzrlib.errors import BzrCommandError
     
-    ret = BranchingScheme.find_scheme(schemename)
+    ret = layout_registry.parse(layoutname)
     if ret is None:
-        raise BzrCommandError('No such branching scheme %r' % schemename)
+        raise BzrCommandError('No such repository layout %r' % layoutname)
     return ret
 
 
@@ -218,8 +218,8 @@
                      Option('all', 
                          help='Convert all revisions, even those not in '
                               'current branch history (forbids --standalone).'),
-                     Option('scheme', type=get_scheme,
-                         help='Branching scheme (none, trunk, etc). '
+                     Option('layout', type=get_layout,
+                         help='Repository layout (none, trunk, etc). '
                               'Default: auto.'),
                      Option('keep', 
                          help="Don't delete branches removed in Subversion."),
@@ -232,13 +232,13 @@
 
     @display_command
     def run(self, from_location, to_location=None, trees=False, 
-            standalone=False, scheme=None, all=False, prefix=None, keep=False,
+            standalone=False, layout=None, all=False, prefix=None, keep=False,
             incremental=False):
         from bzrlib.bzrdir import BzrDir
         from bzrlib.errors import BzrCommandError, NoRepositoryPresent
         from bzrlib import osutils, urlutils
         from bzrlib.plugins.svn.convert import convert_repository
-        from bzrlib.plugins.svn.mapping3 import repository_guess_scheme
+        from bzrlib.plugins.svn.layout import repository_guess_layout
         from bzrlib.plugins.svn.repository import SvnRepository
 
         if to_location is None:
@@ -271,18 +271,21 @@
 
         from_repos.lock_read()
         try:
-            (guessed_scheme, scheme) = repository_guess_scheme(from_repos, 
+            (guessed_layout, layout) = repository_guess_layout(from_repos, 
                 from_repos.get_latest_revnum())
 
             if prefix is not None:
                 prefix = prefix.strip("/") + "/"
-                if guessed_scheme.is_branch(prefix):
+                if guessed_layout.is_branch(prefix):
                     raise BzrCommandError("%s appears to contain a branch. " 
                             "For individual branches, use 'bzr branch'." % 
                             from_location)
-
-                self.outf.write("Importing branches with prefix /%s\n" % 
-                    urlutils.unescape_for_display(prefix, self.outf.encoding))
+                elif guessed_layout.is_branch_parent(prefix):
+                    self.outf.write("Importing branches with prefix /%s\n" % 
+                        urlutils.unescape_for_display(prefix, self.outf.encoding))
+                else:
+                    raise BzrCommandError("The specified path is inside a branch. "
+                        "Specify a different URL or a different repository layout.")
 
             if not isinstance(from_repos, SvnRepository):
                 raise BzrCommandError(
@@ -294,7 +297,7 @@
                     return False
                 return True
 
-            convert_repository(from_repos, to_location, scheme, None, 
+            convert_repository(from_repos, to_location, layout, 
                                not standalone, trees, all, 
                                filter_branch=filter_branch,
                                keep=keep, incremental=incremental)

=== modified file 'convert.py'
--- a/convert.py	2008-08-28 14:41:24 +0000
+++ b/convert.py	2008-09-04 10:15:15 +0000
@@ -112,7 +112,7 @@
     return r
 
 
-def convert_repository(source_repos, output_url, scheme=None, layout=None,
+def convert_repository(source_repos, output_url, layout=None,
                        create_shared_repo=True, working_trees=False, all=False,
                        format=None, filter_branch=None, keep=False, 
                        incremental=False):
@@ -121,7 +121,6 @@
 
     :param source_repos: Subversion repository
     :param output_url: URL to write Bazaar repository to.
-    :param scheme: Branching scheme to use.
     :param layout: Repository layout (object) to use
     :param create_shared_repo: Whether to create a shared Bazaar repository
     :param working_trees: Whether to create working trees
@@ -129,7 +128,6 @@
         branches, should be imported
     :param format: Format to use
     """
-    from mapping3 import SchemeDerivedLayout, set_branching_scheme
     assert not all or create_shared_repo
     if format is None:
         format = get_rich_root_format()
@@ -148,9 +146,6 @@
 
     if layout is not None:
         source_repos.set_layout(layout)
-    elif scheme is not None:
-        set_branching_scheme(source_repos, scheme)
-        layout = SchemeDerivedLayout(source_repos, scheme)
     else:
         layout = source_repos.get_layout()
 

=== modified file 'layout.py'
--- a/layout.py	2008-09-04 09:40:03 +0000
+++ b/layout.py	2008-09-04 10:15:15 +0000
@@ -24,7 +24,6 @@
     """Describes a repository layout."""
 
     def __init__(self, repository):
-        self.repository = repository
         self._config = repository.get_config()
 
     def get_tag_path(self, name, project=""):
@@ -103,14 +102,14 @@
     def is_branch_or_tag_parent(self, path, project=None):
         return self.is_branch_parent(path, project) or self.is_tag_parent(path, project)
 
-    def get_branches(self, revnum, project="", pb=None):
+    def get_branches(self, repository, revnum, project="", pb=None):
         """Retrieve a list of paths that refer to branches in a specific revision.
 
         :result: Iterator over tuples with (project, branch path)
         """
         raise NotImplementedError
 
-    def get_tags(self, revnum, project="", pb=None):
+    def get_tags(self, repository, revnum, project="", pb=None):
         """Retrieve a list of paths that refer to tags in a specific revision.
 
         :result: Iterator over tuples with (project, branch path)
@@ -120,12 +119,8 @@
 
 class TrunkLayout(RepositoryLayout):
 
-    def __init__(self, repository=None):
-        self.repository = repository
-        if repository is not None:
-            self._config = repository.get_config()
-        else:
-            self._config = None
+    def __init__(self, level=None):
+        self.level = level
     
     def get_tag_path(self, name, project=""):
         """Return the path at which the tag with specified name should be found.
@@ -194,21 +189,21 @@
             return path
         return urlutils.join(project, path)
 
-    def get_branches(self, revnum, project=None, pb=None):
+    def get_branches(self, repository, revnum, project=None, pb=None):
         """Retrieve a list of paths that refer to branches in a specific revision.
 
         :result: Iterator over tuples with (project, branch path)
         """
-        return get_root_paths(self.repository, 
+        return get_root_paths(repository, 
              [self._add_project(x, project) for x in "branches/*", "trunk"], 
              revnum, self.is_tag, project)
 
-    def get_tags(self, revnum, project=None, pb=None):
+    def get_tags(self, repository, revnum, project=None, pb=None):
         """Retrieve a list of paths that refer to tags in a specific revision.
 
         :result: Iterator over tuples with (project, branch path)
         """
-        return get_root_paths(self.repository, [self._add_project("tags/*", project)], revnum, self.is_tag, project)
+        return get_root_paths(repository, [self._add_project("tags/*", project)], revnum, self.is_tag, project)
 
     def __repr__(self):
         return "%s()" % self.__class__.__name__
@@ -217,9 +212,9 @@
 class RootLayout(RepositoryLayout):
     """Layout where the root of the repository is a branch."""
 
-    def __init__(self, level=None):
-        self.level = level
-    
+    def __init__(self):
+        pass
+
     def get_tag_path(self, name, project=""):
         """Return the path at which the tag with specified name should be found.
 
@@ -252,7 +247,7 @@
         :param project: Optional name of the project the branch is for. Can include slashes.
         :return: Path of the branch.
         """
-        return None
+        raise AssertionError("can't created branches in this layout")
 
     def parse(self, path):
         """Parse a path.
@@ -267,14 +262,14 @@
 
         :result: Iterator over tuples with (project, branch path)
         """
-        return []
+        raise NotImplementedError
 
     def get_tags(self, revnum, project=None, pb=None):
         """Retrieve a list of paths that refer to tags in a specific revision.
 
         :result: Iterator over tuples with (project, branch path)
         """
-        return []
+        raise NotImplementedError
 
     def __repr__(self):
         return "%s()" % self.__class__.__name__
@@ -361,3 +356,5 @@
                 yield "", bp, bp.split("/")[-1]
 
 
+layout_registry = registry.Registry()
+

=== modified file 'mapping3/__init__.py'
--- a/mapping3/__init__.py	2008-09-04 09:40:03 +0000
+++ b/mapping3/__init__.py	2008-09-04 10:15:15 +0000
@@ -21,6 +21,7 @@
 from bzrlib.plugins.svn.layout import RepositoryLayout, get_root_paths
 from bzrlib.plugins.svn.mapping3.scheme import (BranchingScheme, guess_scheme_from_branch_path, 
                              guess_scheme_from_history, ListBranchingScheme, 
+                             scheme_from_layout,
                              parse_list_scheme_text, NoBranchingScheme,
                              TrunkBranchingScheme, ListBranchingScheme)
 from bzrlib.plugins.svn.ra import DIRENT_KIND
@@ -47,11 +48,11 @@
     def get_tag_name(self, path, project=None):
         return path.split("/")[-1]
 
-    def get_branches(self, revnum, project=None, pb=None):
-        return get_root_paths(self.repository, self.scheme.branch_list, revnum, self.scheme.is_branch, project, pb)
+    def get_branches(self, repository, revnum, project=None, pb=None):
+        return get_root_paths(repository, self.scheme.branch_list, revnum, self.scheme.is_branch, project, pb)
 
-    def get_tags(self, revnum, project=None, pb=None):
-        return get_root_paths(self.repository, self.scheme.tag_list, revnum, self.scheme.is_tag, project, pb)
+    def get_tags(self, repository, revnum, project=None, pb=None):
+        return get_root_paths(repository, self.scheme.tag_list, revnum, self.scheme.is_tag, project, pb)
 
     def get_tag_path(self, name, project=""):
         return self.scheme.get_tag_path(name, project)
@@ -59,9 +60,6 @@
     def get_branch_path(self, name, project=""):
         return self.scheme.get_branch_path(name, project)
 
-    def get_branch_path(self, name, project=""):
-        return self.scheme.get_branch_path(name, project)
-
     def is_branch_parent(self, path, project=None):
         # Na, na, na...
         return self.scheme.is_branch_parent(path, project)

=== modified file 'mapping3/scheme.py'
--- a/mapping3/scheme.py	2008-09-01 13:22:31 +0000
+++ b/mapping3/scheme.py	2008-09-04 10:15:15 +0000
@@ -20,6 +20,7 @@
 from bzrlib.trace import mutter
 
 from base64 import urlsafe_b64decode, urlsafe_b64encode
+from bzrlib.plugins.svn.layout import TrunkLayout, RootLayout
 from bzrlib.plugins.svn.errors import InvalidSvnBranchPath
 from bzrlib.plugins.svn import properties
 import bz2
@@ -538,9 +539,11 @@
 
 def scheme_from_layout(layout):
     if isinstance(layout, TrunkLayout):
-        return TrunkBranchingScheme()
+        return TrunkBranchingScheme(layout.level or 0)
     if isinstance(layout, RootLayout):
         return NoBranchingScheme()
+    # FIXME: Handle CustomLayout
+    # FIXME: What about WildcardLayout
     return TrunkBranchingScheme()
 
 

=== modified file 'tests/mapping_implementations/test_repository.py'
--- a/tests/mapping_implementations/test_repository.py	2008-09-04 09:40:03 +0000
+++ b/tests/mapping_implementations/test_repository.py	2008-09-04 10:15:15 +0000
@@ -25,6 +25,7 @@
 from bzrlib.tests import TestCase, TestSkipped, TestNotApplicable
 
 from bzrlib.plugins.svn import format, ra
+from bzrlib.plugins.svn.layout import TrunkLayout, RootLayout
 from bzrlib.plugins.svn.mapping import mapping_registry
 from bzrlib.plugins.svn.tests import SubversionTestCase
 

=== modified file 'tests/test_fileids.py'
--- a/tests/test_fileids.py	2008-09-04 09:40:03 +0000
+++ b/tests/test_fileids.py	2008-09-04 10:15:15 +0000
@@ -22,6 +22,7 @@
 from bzrlib.tests import TestCase
 
 from bzrlib.plugins.svn.fileids import simple_apply_changes
+from bzrlib.plugins.svn.layout import TrunkLayout, RootLayout
 from bzrlib.plugins.svn.tests import SubversionTestCase
 
 class MockRepo(object):
@@ -180,7 +181,7 @@
 
 class TestFileMapping(TestCase):
     def setUp(self):
-        self.generate_file_id = lambda uuid, revnum, bp, ip: hash((uuid, revnum, bp, ip))
+        self.generate_file_id = lambda uuid, revnum, bp, ip: "%d@%s:%s:%s" % (uuid, revnum, bp, ip)
 
     def apply_mappings(self, mappings, find_children=None, renames={}):
         map = {}
@@ -270,13 +271,13 @@
         self.repos = Repository.open(self.repos_url)
 
     def test_empty(self):
-        self.repos.set_layout(RootLayout(0))
+        self.repos.set_layout(RootLayout())
         self.mapping = self.repos.get_mapping()
         self.assertEqual({"": (self.mapping.generate_file_id(self.repos.uuid, 0, "", u""), self.repos.generate_revision_id(0, "", self.mapping))}, 
                          self.repos.get_fileid_map(0, "", self.mapping))
 
     def test_empty_trunk(self):
-        self.repos.set_layout(RootLayout(0))
+        self.repos.set_layout(TrunkLayout(0))
         self.mapping = self.repos.get_mapping()
         dc = self.get_commit_editor(self.repos_url)
         dc.add_dir("trunk")




More information about the bazaar-commits mailing list