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