Rev 5688: (jelmer) Allow repositories to provide extra combinations to run in file:///home/pqm/archives/thelove/bzr/%2Btrunk/
Canonical.com Patch Queue Manager
pqm at pqm.ubuntu.com
Fri Feb 25 02:01:55 UTC 2011
At file:///home/pqm/archives/thelove/bzr/%2Btrunk/
------------------------------------------------------------
revno: 5688 [merge]
revision-id: pqm at pqm.ubuntu.com-20110225020151-tlqdjbxfv5byh7l7
parent: pqm at pqm.ubuntu.com-20110225012344-r6e63nps6u13g7yr
parent: jelmer at samba.org-20110225001523-is6u6hoxss6g58yj
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Fri 2011-02-25 02:01:51 +0000
message:
(jelmer) Allow repositories to provide extra combinations to run
bzrlib.tests.per_interrepo with. (Jelmer Vernooij)
modified:
bzrlib/controldir.py controldir.py-20100802102926-hvtvh0uae5epuibp-1
bzrlib/registry.py lazy_factory.py-20060809213415-2gfvqadtvdn0phtg-1
bzrlib/repofmt/weaverepo.py presplitout.py-20070125045333-wfav3tsh73oxu3zk-1
bzrlib/repository.py rev_storage.py-20051111201905-119e9401e46257e3
bzrlib/tests/per_interrepository/__init__.py __init__.py-20060220054744-baf49a1f88f17b1a
bzrlib/tests/test_controldir.py test_controldir.py-20110224120830-peu3bobygfcfsilp-1
bzrlib/tests/test_registry.py test_lazy_factory.py-20060809213415-2gfvqadtvdn0phtg-2
bzrlib/transport/__init__.py transport.py-20050711165921-4978aa7ce1285ad5
doc/en/release-notes/bzr-2.4.txt bzr2.4.txt-20110114053217-k7ym9jfz243fddjm-1
=== modified file 'bzrlib/controldir.py'
--- a/bzrlib/controldir.py 2011-02-24 12:17:19 +0000
+++ b/bzrlib/controldir.py 2011-02-24 16:21:50 +0000
@@ -691,6 +691,15 @@
result.append(fmt)
return result + self._get_extra()
+ def _get_all_modules(self):
+ """Return a set of the modules providing objects."""
+ modules = set()
+ for name in self.keys():
+ modules.add(self._get_module(name))
+ for getter in self._extra_formats:
+ modules.add(getter.get_module())
+ return modules
+
class ControlDirFormat(object):
"""An encapsulation of the initialization and open routines for a format.
=== modified file 'bzrlib/registry.py'
--- a/bzrlib/registry.py 2011-02-19 15:26:45 +0000
+++ b/bzrlib/registry.py 2011-02-24 16:21:50 +0000
@@ -35,6 +35,10 @@
def __init__(self, obj):
self._obj = obj
+ def get_module(self):
+ """Get the module the object was loaded from."""
+ return self._obj.__module__
+
def get_obj(self):
"""Get the object that was saved at creation time"""
return self._obj
@@ -54,6 +58,11 @@
self._imported = False
super(_LazyObjectGetter, self).__init__(None)
+ def get_module(self):
+ """Get the module the referenced object will be loaded from.
+ """
+ return self._module_name
+
def get_obj(self):
"""Get the referenced object.
@@ -163,6 +172,14 @@
"""
return self._dict[self._get_key_or_default(key)].get_obj()
+ def _get_module(self, key):
+ """Return the module the object will be or was loaded from.
+
+ :param key: The key to obtain the module for.
+ :return: The name of the module
+ """
+ return self._dict[key].get_module()
+
def get_prefix(self, fullname):
"""Return an object whose key is a prefix of the supplied value.
=== modified file 'bzrlib/repofmt/weaverepo.py'
--- a/bzrlib/repofmt/weaverepo.py 2011-02-21 22:43:53 +0000
+++ b/bzrlib/repofmt/weaverepo.py 2011-02-24 16:39:34 +0000
@@ -861,3 +861,9 @@
InterRepository.register_optimiser(InterWeaveRepo)
+
+
+def get_extra_interrepo_test_combinations():
+ from bzrlib.repofmt import knitrepo
+ return [(InterRepository, RepositoryFormat5(),
+ knitrepo.RepositoryFormatKnit3())]
=== modified file 'bzrlib/repository.py'
--- a/bzrlib/repository.py 2011-02-24 12:19:13 +0000
+++ b/bzrlib/repository.py 2011-02-24 16:39:34 +0000
@@ -4540,3 +4540,5 @@
# No more history
return
+
+
=== modified file 'bzrlib/tests/per_interrepository/__init__.py'
--- a/bzrlib/tests/per_interrepository/__init__.py 2011-02-08 12:15:41 +0000
+++ b/bzrlib/tests/per_interrepository/__init__.py 2011-02-24 16:39:34 +0000
@@ -26,13 +26,18 @@
"""
-from bzrlib import transport
+from bzrlib import (
+ pyutils,
+ transport,
+ )
from bzrlib.errors import (
FileExists,
UninitializableFormat,
)
from bzrlib.repository import (
+ format_registry,
+ InterDifferingSerializer,
InterRepository,
)
from bzrlib.tests import (
@@ -70,10 +75,12 @@
groupcompress_repo,
knitrepo,
pack_repo,
- weaverepo,
)
result = []
- def add_combo(label, from_format, to_format, extra_setup=None):
+ def add_combo(interrepo_cls, from_format, to_format, extra_setup=None,
+ label=None):
+ if label is None:
+ label = interrepo_cls.__name__
result.append((label, from_format, to_format, extra_setup))
# test the default InterRepository between format 6 and the current
# default format.
@@ -85,7 +92,7 @@
for optimiser_class in InterRepository._optimisers:
format_to_test = optimiser_class._get_repo_format_to_test()
if format_to_test is not None:
- add_combo(optimiser_class.__name__, format_to_test, format_to_test)
+ add_combo(optimiser_class, format_to_test, format_to_test)
# if there are specific combinations we want to use, we can add them
# here. We want to test rich root upgrading.
# XXX: although we attach InterRepository class names to these scenarios,
@@ -94,39 +101,50 @@
def force_known_graph(testcase):
from bzrlib.fetch import Inter1and2Helper
testcase.overrideAttr(Inter1and2Helper, 'known_graph_threshold', -1)
- add_combo('InterRepository',
- weaverepo.RepositoryFormat5(),
- knitrepo.RepositoryFormatKnit3())
- add_combo('InterRepository',
+ # Gather extra scenarios from the repository implementations,
+ # as InterRepositories can be used by Repository implementations
+ # they aren't aware of.
+ for module_name in format_registry._get_all_modules():
+ module = pyutils.get_named_object(module_name)
+ try:
+ get_extra_interrepo_test_combinations = getattr(
+ module,
+ "get_extra_interrepo_test_combinations")
+ except AttributeError:
+ continue
+ for (interrepo_cls, from_format, to_format) in (
+ get_extra_interrepo_test_combinations()):
+ add_combo(interrepo_cls, from_format, to_format)
+ add_combo(InterRepository,
knitrepo.RepositoryFormatKnit1(),
knitrepo.RepositoryFormatKnit3())
- add_combo('InterKnitRepo',
+ add_combo(knitrepo.InterKnitRepo,
knitrepo.RepositoryFormatKnit1(),
pack_repo.RepositoryFormatKnitPack1())
- add_combo('InterKnitRepo',
+ add_combo(knitrepo.InterKnitRepo,
pack_repo.RepositoryFormatKnitPack1(),
knitrepo.RepositoryFormatKnit1())
- add_combo('InterKnitRepo',
+ add_combo(knitrepo.InterKnitRepo,
knitrepo.RepositoryFormatKnit3(),
pack_repo.RepositoryFormatKnitPack3())
- add_combo('InterKnitRepo',
+ add_combo(knitrepo.InterKnitRepo,
pack_repo.RepositoryFormatKnitPack3(),
knitrepo.RepositoryFormatKnit3())
- add_combo('InterKnitRepo',
+ add_combo(knitrepo.InterKnitRepo,
pack_repo.RepositoryFormatKnitPack3(),
pack_repo.RepositoryFormatKnitPack4())
- add_combo('InterDifferingSerializer',
+ add_combo(InterDifferingSerializer,
pack_repo.RepositoryFormatKnitPack1(),
pack_repo.RepositoryFormatKnitPack6RichRoot())
- add_combo('InterDifferingSerializer+get_known_graph_ancestry',
+ add_combo(InterDifferingSerializer,
pack_repo.RepositoryFormatKnitPack1(),
pack_repo.RepositoryFormatKnitPack6RichRoot(),
force_known_graph,
- )
- add_combo('InterDifferingSerializer',
+ label='InterDifferingSerializer+get_known_graph_ancestry')
+ add_combo(InterDifferingSerializer,
pack_repo.RepositoryFormatKnitPack6RichRoot(),
groupcompress_repo.RepositoryFormat2a())
- add_combo('InterDifferingSerializer',
+ add_combo(InterDifferingSerializer,
groupcompress_repo.RepositoryFormat2a(),
pack_repo.RepositoryFormatKnitPack6RichRoot())
return result
=== modified file 'bzrlib/tests/test_controldir.py'
--- a/bzrlib/tests/test_controldir.py 2011-02-24 13:44:47 +0000
+++ b/bzrlib/tests/test_controldir.py 2011-02-24 16:23:16 +0000
@@ -56,6 +56,14 @@
self.registry.register(format)
self.assertEquals([format], self.registry._get_all())
+ def test_get_all_modules(self):
+ format = SampleComponentFormat()
+ self.assertEquals(set(), self.registry._get_all_modules())
+ self.registry.register(format)
+ self.assertEquals(
+ set(["bzrlib.tests.test_controldir"]),
+ self.registry._get_all_modules())
+
def test_register_extra(self):
format = SampleExtraComponentFormat()
self.assertEquals([], self.registry._get_all())
=== modified file 'bzrlib/tests/test_registry.py'
--- a/bzrlib/tests/test_registry.py 2011-01-12 01:01:53 +0000
+++ b/bzrlib/tests/test_registry.py 2011-02-24 16:26:25 +0000
@@ -338,3 +338,17 @@
finally:
sys.path.remove(plugin_path)
+ def test_lazy_import_get_module(self):
+ a_registry = registry.Registry()
+ a_registry.register_lazy('obj', "bzrlib.tests.test_registry",
+ 'object1')
+ self.assertEquals("bzrlib.tests.test_registry",
+ a_registry._get_module("obj"))
+
+ def test_normal_get_module(self):
+ class AThing(object):
+ """Something"""
+ a_registry = registry.Registry()
+ a_registry.register("obj", AThing())
+ self.assertEquals("bzrlib.tests.test_registry",
+ a_registry._get_module("obj"))
=== modified file 'bzrlib/transport/__init__.py'
--- a/bzrlib/transport/__init__.py 2011-01-26 19:35:07 +0000
+++ b/bzrlib/transport/__init__.py 2011-02-24 16:21:50 +0000
@@ -27,7 +27,6 @@
"""
from cStringIO import StringIO
-import re
import sys
from bzrlib.lazy_import import lazy_import
@@ -84,10 +83,7 @@
modules = set()
for prefix, factory_list in transport_list_registry.items():
for factory in factory_list:
- if hasattr(factory, "_module_name"):
- modules.add(factory._module_name)
- else:
- modules.add(factory._obj.__module__)
+ modules.add(factory.get_module())
# Add chroot and pathfilter directly, because there is no handler
# registered for it.
modules.add('bzrlib.transport.chroot')
=== modified file 'doc/en/release-notes/bzr-2.4.txt'
--- a/doc/en/release-notes/bzr-2.4.txt 2011-02-25 01:23:44 +0000
+++ b/doc/en/release-notes/bzr-2.4.txt 2011-02-25 02:01:51 +0000
@@ -155,6 +155,11 @@
indicates whether the components of the bzrdir can be upgraded
independent of the ``BzrDir``. (Jelmer Vernooij)
+* Repository formats can now provide
+ ``_get_extra_interrepo_test_combinations`` in the same module
+ to provide extra test combinations for ``bzrlib.tests.per_repository``.
+ (Jelmer Vernooij)
+
* Repository formats should now be registered on the format registry
(``bzrlib.repository.format_registry``) rather than using the class
methods on ``RepositoryFormat``. (Jelmer Vernooij)
More information about the bazaar-commits
mailing list