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