Rev 2262: Change register_metadir to take fully-qualified repository class name. in http://sourcefrog.net/bzr/repoformats

Martin Pool mbp at sourcefrog.net
Wed Feb 14 07:12:37 GMT 2007


At http://sourcefrog.net/bzr/repoformats

------------------------------------------------------------
revno: 2262
revision-id: mbp at sourcefrog.net-20070214071027-0fh0mtcte2kuc86o
parent: mbp at sourcefrog.net-20070213072810-ofxj46bg7en5tx4e
committer: Martin Pool <mbp at sourcefrog.net>
branch nick: repoformats
timestamp: Wed 2007-02-14 18:10:27 +1100
message:
  Change register_metadir to take fully-qualified repository class name.
   
  (Review suggestion from Aaron.)
modified:
  bzrlib/bzrdir.py               bzrdir.py-20060131065624-156dfea39c4387cb
  bzrlib/tests/test_bzrdir.py    test_bzrdir.py-20060131065654-deba40eef51cf220
  bzrlib/tests/test_options.py   testoptions.py-20051014093702-96457cfc86319a8f
=== modified file 'bzrlib/bzrdir.py'
--- a/bzrlib/bzrdir.py	2007-02-13 05:22:39 +0000
+++ b/bzrlib/bzrdir.py	2007-02-14 07:10:27 +0000
@@ -1987,24 +1987,27 @@
     e.g. BzrDirMeta1 with weave repository.  Also, it's more user-oriented.
     """
 
-    def register_metadir(self, key, repo, help, native=True, deprecated=False,
-            repo_module='bzrlib.repository'):
+    def register_metadir(self, key, repo, help, native=True, deprecated=False):
         """Register a metadir subformat.
 
         These all use a BzrDirMetaFormat1 bzrdir, but can be parameterized
         by the Repository format.
 
-        :param repo: The repository format class name as a string.
-
-        :param repo_module: The module from which the repository class 
-        should be lazily loaded.  By default this is bzrlib.repository.
+        :param repo: The fully-qualified repository format class name as a
+        string.
         """
         # This should be expanded to support setting WorkingTree and Branch
         # formats, once BzrDirMetaFormat1 supports that.
         def helper():
-            mod = __import__(repo_module, globals(), locals(), [repo])
-            try:
-                repo_format_class = getattr(mod, repo)
+            mod_name, repo_factory_name = repo.rsplit('.', 1)
+            try:
+                mod = __import__(mod_name, globals(), locals(),
+                        [repo_factory_name])
+            except ImportError, e:
+                raise ImportError('failed to load repository %s: %s'
+                    % (repo, e))
+            try:
+                repo_format_class = getattr(mod, repo_factory_name)
             except AttributeError:
                 raise AttributeError('no repository format %r in module %r' 
                     % (repo, mod))
@@ -2103,15 +2106,16 @@
     ' support checkouts or shared repositories.',
     deprecated=True)
 format_registry.register_metadir('knit',
-    'RepositoryFormatKnit1',
+    'bzrlib.repofmt.knitrepo.RepositoryFormatKnit1',
     'Format using knits.  Recommended.',
-    repo_module='bzrlib.repofmt.knitrepo')
+    )
 format_registry.set_default('knit')
-format_registry.register_metadir('metaweave', 'RepositoryFormat7',
+format_registry.register_metadir('metaweave',
+    'bzrlib.repofmt.weaverepo.RepositoryFormat7',
     'Transitional format in 0.8.  Slower than knit.',
     deprecated=True,
-    repo_module='bzrlib.repofmt.weaverepo')
+    )
 format_registry.register_metadir('experimental-knit2',
-    'RepositoryFormatKnit2',
+    'bzrlib.repofmt.knitrepo.RepositoryFormatKnit2',
     'Experimental successor to knit.  Use at your own risk.',
-    repo_module='bzrlib.repofmt.knitrepo')
+    )

=== modified file 'bzrlib/tests/test_bzrdir.py'
--- a/bzrlib/tests/test_bzrdir.py	2007-02-07 09:11:31 +0000
+++ b/bzrlib/tests/test_bzrdir.py	2007-02-14 07:10:27 +0000
@@ -71,14 +71,16 @@
             ' repositories', deprecated=True)
         my_format_registry.register_lazy('lazy', 'bzrlib.bzrdir', 
             'BzrDirFormat6', 'Format registered lazily', deprecated=True)
-        my_format_registry.register_metadir('knit', 'RepositoryFormatKnit1',
+        my_format_registry.register_metadir('knit',
+            'bzrlib.repofmt.knitrepo.RepositoryFormatKnit1',
             'Format using knits',
-            repo_module='bzrlib.repofmt.knitrepo')
+            )
         my_format_registry.set_default('knit')
-        my_format_registry.register_metadir('experimental-knit2',
-                                            'RepositoryFormatKnit2',
+        my_format_registry.register_metadir(
+            'experimental-knit2',
+            'bzrlib.repofmt.knitrepo.RepositoryFormatKnit2',
             'Experimental successor to knit.  Use at your own risk.',
-            repo_module='bzrlib.repofmt.knitrepo')
+            )
         return my_format_registry
 
     def test_format_registry(self):

=== modified file 'bzrlib/tests/test_options.py'
--- a/bzrlib/tests/test_options.py	2007-02-13 05:22:39 +0000
+++ b/bzrlib/tests/test_options.py	2007-02-14 07:10:27 +0000
@@ -168,8 +168,10 @@
     def test_help(self):
         registry = bzrdir.BzrDirFormatRegistry()
         registry.register_metadir('one', 'RepositoryFormat7', 'one help')
-        registry.register_metadir('two', 'RepositoryFormatKnit1', 'two help',
-            repo_module='bzrlib.repofmt.knitrepo')
+        registry.register_metadir('two',
+            'bzrlib.repofmt.knitrepo.RepositoryFormatKnit1',
+            'two help',
+            )
         registry.set_default('one')
         options = [option.RegistryOption('format', 'format help', registry,
                    str, value_switches=True, title='Formats')]
@@ -191,8 +193,10 @@
                          [('hello', None, 'GAR', 'fg')])
         registry = bzrdir.BzrDirFormatRegistry()
         registry.register_metadir('one', 'RepositoryFormat7', 'one help')
-        registry.register_metadir('two', 'RepositoryFormatKnit1', 'two help',
-            repo_module='bzrlib.repofmt.knitrepo')
+        registry.register_metadir('two',
+                'bzrlib.repofmt.knitrepo.RepositoryFormatKnit1',
+                'two help',
+                )
         registry.set_default('one')
         opt = option.RegistryOption('format', 'format help', registry,
                                     value_switches=False)




More information about the bazaar-commits mailing list