]> git.ipfire.org Git - pakfire.git/commitdiff
sat: Enhance Request class to remove, update or lock things.
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 16 Jul 2011 20:21:44 +0000 (22:21 +0200)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 16 Jul 2011 20:21:44 +0000 (22:21 +0200)
pakfire/satsolver.py
po/pakfire.pot
src/_pakfiremodule.c
src/request.c
src/request.h

index 1a10936397af7f6e6b988d9acd19bb5e14ddeac6..cc7128b761513b6a8adebede6d730f8b279a1258 100644 (file)
@@ -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):
index dc61530681dffbd6633efc816e787b5feb2a7e7d..8837d1fa042ebbdc630314cb9e815b95c66235c5 100644 (file)
@@ -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 <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
index 4fc576eaf86beb661555824029519a3ae7d72cc8..7f4255ecc92d6047431e8b543889e5701296c245 100644 (file)
@@ -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 }
 };
 
index 08ea57f5c7b675bd4a9a4bfdd3b81c67586df7a1..090226c342c4ad380042f9c8370c3b1df5d3391f 100644 (file)
@@ -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;
 }
index 2ad647476b473064c49e44c0a7c925679b9dd613..ae0dc67b2960958e18e4e31dd8da80dd8a244dce 100644 (file)
@@ -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