summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--debian/changelog1
-rw-r--r--python/cache.cc21
2 files changed, 21 insertions, 1 deletions
diff --git a/debian/changelog b/debian/changelog
index 911c68d9..c2c049c3 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -13,6 +13,7 @@ python-apt (0.7.94.3) UNRELEASED; urgency=low
- Check that 2nd argument to Cache.update() really is a SourceList object.
- Fix PackageFile.not_automatic to use NotAutomatic instead of NotSource.
- Add Package.has_versions to see which packages have at least one version.
+ - Add rich compare methods to the Version object.
* python/generic.cc:
- Fix a memory leak when using old attribute names.
- Map ArchiveURI property to archive_uri
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