diff options
| -rw-r--r-- | debian/changelog | 1 | ||||
| -rw-r--r-- | python/cache.cc | 21 |
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 |
