]> git.ipfire.org Git - pakfire.git/commitdiff
request: Add string-parsing functions for erase/update/lock
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 23 Apr 2021 14:42:44 +0000 (14:42 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 23 Apr 2021 14:42:44 +0000 (14:42 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/_pakfire/request.c
src/libpakfire/include/pakfire/request.h
src/libpakfire/libpakfire.sym
src/libpakfire/request.c

index 1e0ea3baba751cca0a7c4c4a29ab0cf18d2a586c..217dc28ebc5cef2e3c6c4834e4ea6dd2f41af9d7 100644 (file)
@@ -61,46 +61,6 @@ static int Request_init(RequestObject* self, PyObject* args, PyObject* kwds) {
        return 0;
 }
 
-static int Request_args_parse(PyObject* args, PakfirePackage* pkg, PakfireRelation* relation, PakfireSelector* selector) {
-       PyObject* obj = NULL;
-
-       if (!PyArg_ParseTuple(args, "O", &obj))
-               return 0;
-
-       if (PyObject_TypeCheck(obj, &PackageType)) {
-               PackageObject* pkg_obj = (PackageObject *)obj;
-               *pkg = pkg_obj->package;
-
-               return 1;
-       }
-
-       if (PyObject_TypeCheck(obj, &RelationType)) {
-               RelationObject* relation_obj = (RelationObject *)obj;
-               *relation = relation_obj->relation;
-
-               return 1;
-       }
-
-       if (PyObject_TypeCheck(obj, &SelectorType)) {
-               SelectorObject* selector_obj = (SelectorObject *)obj;
-               *selector = selector_obj->selector;
-
-               return 1;
-       }
-
-       PyErr_SetString(PyExc_ValueError, "Requires a Package, Relation or Selector object");
-       return 0;
-}
-
-static PyObject* Request_operation_return(int r) {
-       if (r) {
-               PyErr_SetFromErrno(PyExc_OSError);
-               return NULL;
-       }
-
-       Py_RETURN_NONE;
-}
-
 static PyObject* Request_install(RequestObject* self, PyObject* args) {
        const char* what = NULL;
 
@@ -114,93 +74,67 @@ static PyObject* Request_install(RequestObject* self, PyObject* args) {
        }
 
        Py_RETURN_NONE;
-
-       // XXX DEAD CODE
-
-       PakfirePackage pkg = NULL;
-       PakfireRelation relation = NULL;
-       PakfireSelector selector = NULL;
-
-       if (!Request_args_parse(args, &pkg, &relation, &selector))
-               return NULL;
-
-       assert(pkg || relation || selector);
-
-       int ret = 0;
-
-       if (pkg)
-               ret = pakfire_request_install_package(self->request, pkg);
-
-       else if (relation)
-               ret = pakfire_request_install_relation(self->request, relation);
-
-       else if (selector)
-               ret = pakfire_request_install_selector(self->request, selector);
-
-       return Request_operation_return(ret);
 }
 
 static PyObject* Request_erase(RequestObject* self, PyObject* args) {
-       PakfirePackage pkg = NULL;
-       PakfireRelation relation = NULL;
-       PakfireSelector selector = NULL;
+       const char* what = NULL;
+       int flags = 0;
 
-       if (!Request_args_parse(args, &pkg, &relation, &selector))
+       if (!PyArg_ParseTuple(args, "s|i", &what, &flags))
                return NULL;
 
-       assert(pkg || relation || selector);
-
-       int ret = 0;
-
-       if (pkg)
-               ret = pakfire_request_erase_package(self->request, pkg, 0);
-
-       else if (selector)
-               ret = pakfire_request_erase_selector(self->request, selector, 0);
+       int r = pakfire_request_erase(self->request, what, flags);
+       if (r) {
+               PyErr_SetFromErrno(PyExc_OSError);
+               return NULL;
+       }
 
-       return Request_operation_return(ret);
+       Py_RETURN_NONE;
 }
 
 static PyObject* Request_upgrade(RequestObject* self, PyObject* args) {
-       PakfirePackage pkg = NULL;
-       PakfireRelation relation = NULL;
-       PakfireSelector selector = NULL;
+       const char* what = NULL;
 
-       if (!Request_args_parse(args, &pkg, &relation, &selector))
+       if (!PyArg_ParseTuple(args, "s", &what))
                return NULL;
 
-       assert(pkg || relation || selector);
-
-       int ret = 0;
-
-       if (pkg)
-               ret = pakfire_request_upgrade_package(self->request, pkg);
-
-       else if (relation)
-               ret = pakfire_request_upgrade_relation(self->request, relation);
-
-       else if (selector)
-               ret = pakfire_request_upgrade_selector(self->request, selector);
+       int r = pakfire_request_upgrade(self->request, what);
+       if (r) {
+               PyErr_SetFromErrno(PyExc_OSError);
+               return NULL;
+       }
 
-       return Request_operation_return(ret);
+       Py_RETURN_NONE;
 }
 
 static PyObject* Request_upgrade_all(RequestObject* self) {
-       int ret = pakfire_request_upgrade_all(self->request);
+       int r = pakfire_request_upgrade_all(self->request);
+       if (r) {
+               PyErr_SetFromErrno(PyExc_OSError);
+               return NULL;
+       }
 
-       return Request_operation_return(ret);
+       Py_RETURN_NONE;
 }
 
 static PyObject* Request_distupgrade(RequestObject* self) {
-       int ret = pakfire_request_distupgrade(self->request);
+       int r = pakfire_request_distupgrade(self->request);
+       if (r) {
+               PyErr_SetFromErrno(PyExc_OSError);
+               return NULL;
+       }
 
-       return Request_operation_return(ret);
+       Py_RETURN_NONE;
 }
 
 static PyObject* Request_verify(RequestObject* self) {
-       int ret = pakfire_request_verify(self->request);
+       int r = pakfire_request_verify(self->request);
+       if (r) {
+               PyErr_SetFromErrno(PyExc_OSError);
+               return NULL;
+       }
 
-       return Request_operation_return(ret);
+       Py_RETURN_NONE;
 }
 
 static PyObject* Request_get_problems(RequestObject* self) {
index f1f0744e3cc8782fbd0f827070b9afd336c6c6b3..9185c2d0f49391e579d26eaf55267cabef74d815 100644 (file)
@@ -53,10 +53,12 @@ int pakfire_request_install_package(struct pakfire_request* request, PakfirePack
 int pakfire_request_install_relation(struct pakfire_request* request, PakfireRelation relation);
 int pakfire_request_install_selector(struct pakfire_request* request, PakfireSelector selector);
 
+int pakfire_request_erase(struct pakfire_request* request, const char* what, int flags);
 int pakfire_request_erase_package(struct pakfire_request* request, PakfirePackage package, int flags);
 int pakfire_request_erase_relation(struct pakfire_request* request, PakfireRelation relation, int flags);
 int pakfire_request_erase_selector(struct pakfire_request* request, PakfireSelector selector, int flags);
 
+int pakfire_request_upgrade(struct pakfire_request* request, const char* what);
 int pakfire_request_upgrade_package(struct pakfire_request* request, PakfirePackage package);
 int pakfire_request_upgrade_relation(struct pakfire_request* request, PakfireRelation relation);
 int pakfire_request_upgrade_selector(struct pakfire_request* request, PakfireSelector selector);
@@ -64,6 +66,7 @@ int pakfire_request_upgrade_selector(struct pakfire_request* request, PakfireSel
 int pakfire_request_upgrade_all(struct pakfire_request* request);
 int pakfire_request_distupgrade(struct pakfire_request* request);
 
+ int pakfire_request_lock(struct pakfire_request* request, const char* what);
 int pakfire_request_lock_package(struct pakfire_request* request, PakfirePackage package);
 int pakfire_request_lock_relation(struct pakfire_request* request, PakfireRelation relation);
 int pakfire_request_lock_selector(struct pakfire_request* request, PakfireSelector selector);
index 0297a9b2185b6d0fb74b4d9a4675e8408c597f16..e7e38f4a875b5fac3592718b090590bf1d8973f8 100644 (file)
@@ -373,6 +373,7 @@ global:
        # request
        pakfire_request_create;
        pakfire_request_distupgrade;
+       pakfire_request_erase;
        pakfire_request_erase_package;
        pakfire_request_erase_relation;
        pakfire_request_erase_selector;
@@ -388,6 +389,7 @@ global:
        pakfire_request_lock_selector;
        pakfire_request_ref;
        pakfire_request_solve;
+       pakfire_request_upgrade;
        pakfire_request_upgrade_all;
        pakfire_request_upgrade_package;
        pakfire_request_upgrade_relation;
index d1547b4a0254e52d821b215acc188e5f4465e3c5..0d70d91b2d4082014abfbaeb3a463a29ac209a8e 100644 (file)
@@ -240,7 +240,8 @@ static int pakfire_request_add_package(struct pakfire_request* request, int acti
        return 0;
 }
 
-static int pakfire_request_add_job(struct pakfire_request* request, int action, const char* what) {
+static int pakfire_request_add_job(struct pakfire_request* request, int action,
+               const char* what, int extra_flags) {
        Pool* pool = pakfire_get_solv_pool(request->pakfire);
        Id key = 0;
 
@@ -294,7 +295,7 @@ static int pakfire_request_add_job(struct pakfire_request* request, int action,
 
        // Set action and global flags
        for (int i = 0; i < jobs.count; i += 2)
-               jobs.elements[i] |= request->flags | action;
+               jobs.elements[i] |= request->flags | action | extra_flags;
 
        // Merge jobs into the main job queue
        queue_insertn(&request->jobs, request->jobs.count, jobs.count, jobs.elements);
@@ -304,7 +305,7 @@ static int pakfire_request_add_job(struct pakfire_request* request, int action,
 }
 
 PAKFIRE_EXPORT int pakfire_request_install(struct pakfire_request* request, const char* what) {
-       return pakfire_request_add_job(request, SOLVER_INSTALL, what);
+       return pakfire_request_add_job(request, SOLVER_INSTALL, what, 0);
 }
 
 PAKFIRE_EXPORT int pakfire_request_install_package(
@@ -329,6 +330,10 @@ static int erase_flags(int flags) {
        return additional;
 }
 
+PAKFIRE_EXPORT int pakfire_request_erase(struct pakfire_request* request, const char* what, int flags) {
+       return pakfire_request_add_job(request, SOLVER_ERASE, what, erase_flags(flags));
+}
+
 PAKFIRE_EXPORT int pakfire_request_erase_package(
                struct pakfire_request* request, PakfirePackage package, int flags) {
        return pakfire_request_add_package(request, SOLVER_ERASE, package, erase_flags(flags));
@@ -346,6 +351,10 @@ PAKFIRE_EXPORT int pakfire_request_erase_selector(struct pakfire_request* reques
        return pakfire_selector2queue(selector, &request->jobs, SOLVER_ERASE|additional);
 }
 
+PAKFIRE_EXPORT int pakfire_request_upgrade(struct pakfire_request* request, const char* what) {
+       return pakfire_request_add_job(request, SOLVER_UPDATE, what, 0);
+}
+
 PAKFIRE_EXPORT int pakfire_request_upgrade_package(
                struct pakfire_request* request, PakfirePackage package) {
        return pakfire_request_add_package(request, SOLVER_UPDATE, package, 0);
@@ -371,6 +380,10 @@ PAKFIRE_EXPORT int pakfire_request_distupgrade(struct pakfire_request* request)
        return 0;
 }
 
+PAKFIRE_EXPORT int pakfire_request_lock(struct pakfire_request* request, const char* what) {
+       return pakfire_request_add_job(request, SOLVER_LOCK, what, 0);
+}
+
 PAKFIRE_EXPORT int pakfire_request_lock_package(struct pakfire_request* request, PakfirePackage package) {
        return pakfire_request_add_package(request, SOLVER_LOCK, package, 0);
 }