summaryrefslogtreecommitdiff
path: root/python/rpmds-py.c
diff options
context:
space:
mode:
authorPanu Matilainen <pmatilai@redhat.com>2009-10-28 16:27:15 +0200
committerPanu Matilainen <pmatilai@redhat.com>2009-10-28 16:27:15 +0200
commit70bebfdd7eab41d7e0aecf569692aac113958a3a (patch)
treec632e4e159b5b4f66c55ab0f553f747311eff4e9 /python/rpmds-py.c
parent46b2df7c577b3f22a167bc46e655c9c008133a66 (diff)
downloadrpm-70bebfdd7eab41d7e0aecf569692aac113958a3a.tar.gz
rpm-70bebfdd7eab41d7e0aecf569692aac113958a3a.tar.bz2
rpm-70bebfdd7eab41d7e0aecf569692aac113958a3a.zip
Eliminate ambiguous tp_compare and tp_richcompare from rpm.ds
- both comparison types are highly ambiguous, eg what on earth does "foo provides bar = 1" < "bar requires foo > 2" mean? - if straight ds1.evr vs ds2.evr comparison is needed, we'll be better off supporting that through rpm.versionCompare() which has clear semantics - avoids another Python 3 incompatibility too
Diffstat (limited to 'python/rpmds-py.c')
-rw-r--r--python/rpmds-py.c108
1 files changed, 2 insertions, 106 deletions
diff --git a/python/rpmds-py.c b/python/rpmds-py.c
index 3c17869e1..ac1b6b159 100644
--- a/python/rpmds-py.c
+++ b/python/rpmds-py.c
@@ -16,50 +16,6 @@ struct rpmdsObject_s {
rpmds ds;
};
-
-/**
- * Split EVR into epoch, version, and release components.
- * @param evr [epoch:]version[-release] string
- * @retval *ep pointer to epoch
- * @retval *vp pointer to version
- * @retval *rp pointer to release
- */
-static
-void rpmds_ParseEVR(char * evr,
- const char ** ep,
- const char ** vp,
- const char ** rp)
-{
- const char *epoch;
- const char *version; /* assume only version is present */
- const char *release;
- char *s, *se;
-
- s = evr;
- while (*s && risdigit(*s)) s++; /* s points to epoch terminator */
- se = strrchr(s, '-'); /* se points to version terminator */
-
- if (*s == ':') {
- epoch = evr;
- *s++ = '\0';
- version = s;
- if (*epoch == '\0') epoch = "0";
- } else {
- epoch = NULL; /* XXX disable epoch compare if missing */
- version = evr;
- }
- if (se) {
- *se++ = '\0';
- release = se;
- } else {
- release = NULL;
- }
-
- if (ep) *ep = epoch;
- if (vp) *vp = version;
- if (rp) *rp = release;
-}
-
static PyObject *
rpmds_Count(rpmdsObject * s)
{
@@ -121,66 +77,6 @@ rpmds_Refs(rpmdsObject * s)
return Py_BuildValue("i", rpmdsRefs(s->ds));
}
-static int compare_values(const char *str1, const char *str2)
-{
- if (!str1 && !str2)
- return 0;
- else if (str1 && !str2)
- return 1;
- else if (!str1 && str2)
- return -1;
- return rpmvercmp(str1, str2);
-}
-
-static int
-rpmds_compare(rpmdsObject * a, rpmdsObject * b)
-{
- char *aEVR = xstrdup(rpmdsEVR(a->ds));
- const char *aE, *aV, *aR;
- char *bEVR = xstrdup(rpmdsEVR(b->ds));
- const char *bE, *bV, *bR;
- int rc;
-
- /* XXX W2DO? should N be compared? */
- rpmds_ParseEVR(aEVR, &aE, &aV, &aR);
- rpmds_ParseEVR(bEVR, &bE, &bV, &bR);
-
- rc = compare_values(aE, bE);
- if (!rc) {
- rc = compare_values(aV, bV);
- if (!rc)
- rc = compare_values(aR, bR);
- }
-
- aEVR = _free(aEVR);
- bEVR = _free(bEVR);
-
- return rc;
-}
-
-static PyObject *
-rpmds_richcompare(rpmdsObject * a, rpmdsObject * b, int op)
-{
- int rc;
-
- switch (op) {
- case Py_NE:
- /* XXX map ranges overlap boolean onto '!=' python syntax. */
- rc = rpmdsCompare(a->ds, b->ds);
- rc = (rc < 0 ? -1 : (rc == 0 ? 1 : 0));
- break;
- case Py_LT:
- case Py_LE:
- case Py_GT:
- case Py_GE:
- case Py_EQ:
- default:
- rc = -1;
- break;
- }
- return Py_BuildValue("i", rc);
-}
-
static PyObject *
rpmds_iternext(rpmdsObject * s)
{
@@ -426,7 +322,7 @@ PyTypeObject rpmds_Type = {
0, /* tp_print */
(getattrfunc)0, /* tp_getattr */
(setattrfunc)0, /* tp_setattr */
- (cmpfunc) rpmds_compare, /* tp_compare */
+ 0, /* tp_compare */
(reprfunc)0, /* tp_repr */
0, /* tp_as_number */
0, /* tp_as_sequence */
@@ -441,7 +337,7 @@ PyTypeObject rpmds_Type = {
rpmds_doc, /* tp_doc */
0, /* tp_traverse */
0, /* tp_clear */
- (richcmpfunc) rpmds_richcompare,/* tp_richcompare */
+ 0, /* tp_richcompare */
0, /* tp_weaklistoffset */
PyObject_SelfIter, /* tp_iter */
(iternextfunc) rpmds_iternext, /* tp_iternext */