Rev 3767: Add bzrlib.api.require_any_api, fixing bug 279447. in http://people.ubuntu.com/~robertc/baz2.0/api

Robert Collins robertc at robertcollins.net
Tue Oct 7 05:51:30 BST 2008


At http://people.ubuntu.com/~robertc/baz2.0/api

------------------------------------------------------------
revno: 3767
revision-id: robertc at robertcollins.net-20081007045125-4h9com3yii5h6zpx
parent: pqm at pqm.ubuntu.com-20081006223227-11nq4m186th9ljeq
committer: Robert Collins <robertc at robertcollins.net>
branch nick: api
timestamp: Tue 2008-10-07 15:51:25 +1100
message:
  Add bzrlib.api.require_any_api, fixing bug 279447.
modified:
  NEWS                           NEWS-20050323055033-4e00b5db738777ff
  bzrlib/api.py                  api.py-20070626082640-35lspz7j0ys7a8ld-1
  bzrlib/tests/test_api.py       testapi.py-20051027033546-6f9be2d308d18a52
=== modified file 'NEWS'
--- a/NEWS	2008-10-03 00:18:15 +0000
+++ b/NEWS	2008-10-07 04:51:25 +0000
@@ -79,6 +79,9 @@
 
   BUG FIXES:
 
+    * API versioning support now has a multiple-version checking api
+      ``require_any_api``. (Robert Collins, #279447)
+
     * Branching from a shared repository on a smart server into a new
       repository now preserves the repository format.
       (Andrew Bennetts, #269214)

=== modified file 'bzrlib/api.py'
--- a/bzrlib/api.py	2007-06-26 08:52:20 +0000
+++ b/bzrlib/api.py	2008-10-07 04:51:25 +0000
@@ -80,3 +80,24 @@
     minimum = get_minimum_api_version(object_with_api)
     if wanted_api < minimum or wanted_api > current:
         raise IncompatibleAPI(object_with_api, wanted_api, minimum, current)
+
+def require_any_api(object_with_api, wanted_api_list):
+    """Check if object_with_api supports the api version wanted_api.
+
+    :param object_with_api: An object which exports an API minimum and current
+        version. See get_minimum_api_version and get_current_api_version for
+        details.
+    :param wanted_api: A list of API versions, any of which being available is
+        sufficent.
+    :return None:
+    :raises IncompatibleAPI: When the wanted_api is not supported by
+        object_with_api.
+
+    Added in bzrlib 1.9.
+    """
+    for api in wanted_api_list[:-1]:
+        try:
+            return require_api(object_with_api, api)
+        except IncompatibleAPI:
+            pass
+    require_api(object_with_api, wanted_api_list[-1])

=== modified file 'bzrlib/tests/test_api.py'
--- a/bzrlib/tests/test_api.py	2007-06-26 08:52:20 +0000
+++ b/bzrlib/tests/test_api.py	2008-10-07 04:51:25 +0000
@@ -71,6 +71,31 @@
         self.assertEqual(bzrlib.version_info[0:3],
             bzrlib.api.get_current_api_version(an_object))
 
+    def test_require_any_api_wanted_one(self):
+        an_object = TrivialObject()
+        an_object.api_minimum_version = (1, 2, 3)
+        an_object.api_current_version = (4, 5, 6)
+        bzrlib.api.require_any_api(an_object, [(1, 2, 3)])
+
+    def test_require_any_api_wanted_first_compatible(self):
+        an_object = TrivialObject()
+        an_object.api_minimum_version = (1, 2, 3)
+        an_object.api_current_version = (4, 5, 6)
+        bzrlib.api.require_any_api(an_object, [(1, 2, 3), (5, 6, 7)])
+
+    def test_require_any_api_wanted_second_compatible(self):
+        an_object = TrivialObject()
+        an_object.api_minimum_version = (1, 2, 3)
+        an_object.api_current_version = (4, 5, 6)
+        bzrlib.api.require_any_api(an_object, [(5, 6, 7), (1, 2, 3)])
+
+    def test_require_any_api_wanted_none_compatible(self):
+        an_object = TrivialObject()
+        an_object.api_minimum_version = (1, 2, 3)
+        an_object.api_current_version = (4, 5, 6)
+        self.assertRaises(IncompatibleAPI, bzrlib.api.require_any_api,
+            an_object, [(1, 2, 2), (5, 6, 7)])
+
     def test_require_api_wanted_is_minimum_is_ok(self):
         an_object = TrivialObject()
         an_object.api_minimum_version = (1, 2, 3)




More information about the bazaar-commits mailing list