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