From: Michael Tremer Date: Sat, 16 Jul 2011 20:21:44 +0000 (+0200) Subject: sat: Enhance Request class to remove, update or lock things. X-Git-Tag: 0.9.3~25 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bd7ea6163ee5ee60007ad03304a8fd9e9bec90ec;p=pakfire.git sat: Enhance Request class to remove, update or lock things. --- diff --git a/pakfire/satsolver.py b/pakfire/satsolver.py index 1a1093639..cc7128b76 100644 --- a/pakfire/satsolver.py +++ b/pakfire/satsolver.py @@ -23,6 +23,51 @@ class Request(_pakfire.Request): raise Exception, "Unknown type" + def remove(self, what): + if isinstance(what, Solvable): + self.remove_solvable(what) + return + + elif isinstance(what, Relation): + self.remove_relation(what) + return + + elif type(what) == type("string"): + self.remove_name(what) + return + + raise Exception, "Unknown type" + + def update(self, what): + if isinstance(what, Solvable): + self.update_solvable(what) + return + + elif isinstance(what, Relation): + self.update_relation(what) + return + + elif type(what) == type("string"): + self.update_name(what) + return + + raise Exception, "Unknown type" + + def lock(self, what): + if isinstance(what, Solvable): + self.lock_solvable(what) + return + + elif isinstance(what, Relation): + self.lock_relation(what) + return + + elif type(what) == type("string"): + self.lock_name(what) + return + + raise Exception, "Unknown type" + class Solver(object): def __init__(self, pakfire, pool): diff --git a/po/pakfire.pot b/po/pakfire.pot index dc6153068..8837d1fa0 100644 --- a/po/pakfire.pot +++ b/po/pakfire.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-07-16 20:47+0200\n" +"POT-Creation-Date: 2011-07-16 22:20+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/src/_pakfiremodule.c b/src/_pakfiremodule.c index 4fc576eaf..7f4255ecc 100644 --- a/src/_pakfiremodule.c +++ b/src/_pakfiremodule.c @@ -31,6 +31,15 @@ static PyMethodDef Request_methods[] = { {"install_solvable", (PyCFunction)Request_install_solvable, METH_VARARGS, NULL}, {"install_relation", (PyCFunction)Request_install_relation, METH_VARARGS, NULL}, {"install_name", (PyCFunction)Request_install_name, METH_VARARGS, NULL}, + {"remove_solvable", (PyCFunction)Request_remove_solvable, METH_VARARGS, NULL}, + {"remove_relation", (PyCFunction)Request_remove_relation, METH_VARARGS, NULL}, + {"remove_name", (PyCFunction)Request_remove_name, METH_VARARGS, NULL}, + {"update_solvable", (PyCFunction)Request_update_solvable, METH_VARARGS, NULL}, + {"update_relation", (PyCFunction)Request_update_relation, METH_VARARGS, NULL}, + {"update_name", (PyCFunction)Request_update_name, METH_VARARGS, NULL}, + {"lock_solvable", (PyCFunction)Request_lock_solvable, METH_VARARGS, NULL}, + {"lock_relation", (PyCFunction)Request_lock_relation, METH_VARARGS, NULL}, + {"lock_name", (PyCFunction)Request_lock_name, METH_VARARGS, NULL}, { NULL, NULL, 0, NULL } }; diff --git a/src/request.c b/src/request.c index 08ea57f5c..090226c34 100644 --- a/src/request.c +++ b/src/request.c @@ -42,6 +42,21 @@ PyObject *Request_dealloc(RequestObject *self) { self->ob_type->tp_free((PyObject *)self); } +void _Request_solvable(RequestObject *self, Id what, Id solvable) { + queue_push(&self->_queue, what|SOLVER_SOLVABLE); + queue_push(&self->_queue, solvable); +} + +void _Request_relation(RequestObject *self, Id what, Id relation) { + queue_push(&self->_queue, what|SOLVER_SOLVABLE_PROVIDES); + queue_push(&self->_queue, relation); +} + +void _Request_name(RequestObject *self, Id what, Id provides) { + queue_push(&self->_queue, what|SOLVER_SOLVABLE_NAME); + queue_push(&self->_queue, provides); +} + PyObject *Request_install_solvable(RequestObject *self, PyObject *args) { SolvableObject *solv; @@ -49,8 +64,7 @@ PyObject *Request_install_solvable(RequestObject *self, PyObject *args) { /* XXX raise exception */ } - queue_push(&self->_queue, SOLVER_INSTALL|SOLVER_SOLVABLE); - queue_push(&self->_queue, solv->_id); + _Request_solvable(self, SOLVER_INSTALL, solv->_id); Py_RETURN_NONE; } @@ -62,8 +76,7 @@ PyObject *Request_install_relation(RequestObject *self, PyObject *args) { /* XXX raise exception */ } - queue_push(&self->_queue, SOLVER_INSTALL|SOLVER_SOLVABLE_PROVIDES); - queue_push(&self->_queue, rel->_id); + _Request_relation(self, SOLVER_INSTALL, rel->_id); Py_RETURN_NONE; } @@ -75,8 +88,119 @@ PyObject *Request_install_name(RequestObject *self, PyObject *args) { /* XXX raise exception */ } - queue_push(&self->_queue, SOLVER_INSTALL|SOLVER_SOLVABLE_NAME); - queue_push(&self->_queue, pool_str2id(self->_pool, name, 1)); + Id _name = pool_str2id(self->_pool, name, 1); + _Request_name(self, SOLVER_INSTALL, _name); + + Py_RETURN_NONE; +} + +PyObject *Request_remove_solvable(RequestObject *self, PyObject *args) { + SolvableObject *solv; + + if (!PyArg_ParseTuple(args, "O", &solv)) { + /* XXX raise exception */ + } + + _Request_solvable(self, SOLVER_ERASE, solv->_id); + + Py_RETURN_NONE; +} + +PyObject *Request_remove_relation(RequestObject *self, PyObject *args) { + RelationObject *rel; + + if (!PyArg_ParseTuple(args, "O", &rel)) { + /* XXX raise exception */ + } + + _Request_relation(self, SOLVER_ERASE, rel->_id); + + Py_RETURN_NONE; +} + +PyObject *Request_remove_name(RequestObject *self, PyObject *args) { + const char *name; + + if (!PyArg_ParseTuple(args, "s", &name)) { + /* XXX raise exception */ + } + + Id _name = pool_str2id(self->_pool, name, 1); + _Request_name(self, SOLVER_ERASE, _name); + + Py_RETURN_NONE; +} + +PyObject *Request_update_solvable(RequestObject *self, PyObject *args) { + SolvableObject *solv; + + if (!PyArg_ParseTuple(args, "O", &solv)) { + /* XXX raise exception */ + } + + _Request_solvable(self, SOLVER_UPDATE, solv->_id); + + Py_RETURN_NONE; +} + +PyObject *Request_update_relation(RequestObject *self, PyObject *args) { + RelationObject *rel; + + if (!PyArg_ParseTuple(args, "O", &rel)) { + /* XXX raise exception */ + } + + _Request_relation(self, SOLVER_UPDATE, rel->_id); + + Py_RETURN_NONE; +} + +PyObject *Request_update_name(RequestObject *self, PyObject *args) { + const char *name; + + if (!PyArg_ParseTuple(args, "s", &name)) { + /* XXX raise exception */ + } + + Id _name = pool_str2id(self->_pool, name, 1); + _Request_name(self, SOLVER_UPDATE, _name); + + Py_RETURN_NONE; +} + +PyObject *Request_lock_solvable(RequestObject *self, PyObject *args) { + SolvableObject *solv; + + if (!PyArg_ParseTuple(args, "O", &solv)) { + /* XXX raise exception */ + } + + _Request_solvable(self, SOLVER_LOCK, solv->_id); + + Py_RETURN_NONE; +} + +PyObject *Request_lock_relation(RequestObject *self, PyObject *args) { + RelationObject *rel; + + if (!PyArg_ParseTuple(args, "O", &rel)) { + /* XXX raise exception */ + } + + _Request_relation(self, SOLVER_LOCK, rel->_id); + + Py_RETURN_NONE; +} + +PyObject *Request_lock_name(RequestObject *self, PyObject *args) { + const char *name; + + if (!PyArg_ParseTuple(args, "s", &name)) { + /* XXX raise exception */ + } + + Id _name = pool_str2id(self->_pool, name, 1); + _Request_name(self, SOLVER_LOCK, _name); Py_RETURN_NONE; } diff --git a/src/request.h b/src/request.h index 2ad647476..ae0dc67b2 100644 --- a/src/request.h +++ b/src/request.h @@ -15,10 +15,27 @@ typedef struct { extern PyObject* Request_new(PyTypeObject *type, PyObject *args, PyObject *kwds); extern PyObject *Request_dealloc(RequestObject *self); + +extern void _Request_solvable(RequestObject *self, Id what, Id solvable); +extern void _Request_relation(RequestObject *self, Id what, Id relation); +extern void _Request_name(RequestObject *self, Id what, Id provides); + extern PyObject *Request_install_solvable(RequestObject *self, PyObject *args); extern PyObject *Request_install_relation(RequestObject *self, PyObject *args); extern PyObject *Request_install_name(RequestObject *self, PyObject *args); +extern PyObject *Request_remove_solvable(RequestObject *self, PyObject *args); +extern PyObject *Request_remove_relation(RequestObject *self, PyObject *args); +extern PyObject *Request_remove_name(RequestObject *self, PyObject *args); + +extern PyObject *Request_update_solvable(RequestObject *self, PyObject *args); +extern PyObject *Request_update_relation(RequestObject *self, PyObject *args); +extern PyObject *Request_update_name(RequestObject *self, PyObject *args); + +extern PyObject *Request_lock_solvable(RequestObject *self, PyObject *args); +extern PyObject *Request_lock_relation(RequestObject *self, PyObject *args); +extern PyObject *Request_lock_name(RequestObject *self, PyObject *args); + extern PyTypeObject RequestType; #endif