summaryrefslogtreecommitdiff
path: root/python/cache.cc
diff options
context:
space:
mode:
authorJulian Andres Klode <jak@debian.org>2010-04-21 15:47:46 +0200
committerJulian Andres Klode <jak@debian.org>2010-04-21 15:47:46 +0200
commitc997f18dbcbbe156aa34af408a62a4b74f58f41d (patch)
treec478b2a33e673335e359fb97cfffffcb7afbc35e /python/cache.cc
parent55122aa21c2947aacd07554da57bc323afcd730e (diff)
downloadpython-apt-c997f18dbcbbe156aa34af408a62a4b74f58f41d.tar.gz
Add rich compare methods to the Version object.
Diffstat (limited to 'python/cache.cc')
-rw-r--r--python/cache.cc21
1 files changed, 20 insertions, 1 deletions
diff --git a/python/cache.cc b/python/cache.cc
index 7cfaffbf..03c453a1 100644
--- a/python/cache.cc
+++ b/python/cache.cc
@@ -913,6 +913,25 @@ static PyObject *VersionRepr(PyObject *Self)
}
#undef NOTNULL
+static PyObject *version_richcompare(PyObject *obj1, PyObject *obj2, int op)
+{
+ if (!PyVersion_Check(obj2))
+ return Py_INCREF(Py_NotImplemented), Py_NotImplemented;
+
+ const pkgCache::VerIterator &a = GetCpp<pkgCache::VerIterator>(obj1);
+ const pkgCache::VerIterator &b = GetCpp<pkgCache::VerIterator>(obj2);
+ const int comparison = _system->VS->CmpVersion(a.VerStr(), b.VerStr());
+ switch (op) {
+ case Py_LT: return PyBool_FromLong(comparison < 0);
+ case Py_LE: return PyBool_FromLong(comparison <= 0);
+ case Py_EQ: return PyBool_FromLong(comparison == 0);
+ case Py_NE: return PyBool_FromLong(comparison != 0);
+ case Py_GE: return PyBool_FromLong(comparison >= 0);
+ case Py_GT: return PyBool_FromLong(comparison > 0);
+ default: return NULL; // should not happen.
+ }
+}
+
static PyGetSetDef VersionGetSet[] = {
{"arch",VersionGetArch,0,
"The architecture of this specific version of the package."},
@@ -985,7 +1004,7 @@ PyTypeObject PyVersion_Type =
"Version Object", // tp_doc
CppTraverse<pkgCache::VerIterator>, // tp_traverse
CppClear<pkgCache::VerIterator>,// tp_clear
- 0, // tp_richcompare
+ version_richcompare, // tp_richcompare
0, // tp_weaklistoffset
0, // tp_iter
0, // tp_iternext