From: Michael Tremer Date: Fri, 23 Apr 2021 14:42:44 +0000 (+0000) Subject: request: Add string-parsing functions for erase/update/lock X-Git-Tag: 0.9.28~1285^2~247 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=32e0d47a52cd4b944c06656249c83d9ee3222eff;p=pakfire.git request: Add string-parsing functions for erase/update/lock Signed-off-by: Michael Tremer --- diff --git a/src/_pakfire/request.c b/src/_pakfire/request.c index 1e0ea3bab..217dc28eb 100644 --- a/src/_pakfire/request.c +++ b/src/_pakfire/request.c @@ -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) { diff --git a/src/libpakfire/include/pakfire/request.h b/src/libpakfire/include/pakfire/request.h index f1f0744e3..9185c2d0f 100644 --- a/src/libpakfire/include/pakfire/request.h +++ b/src/libpakfire/include/pakfire/request.h @@ -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); diff --git a/src/libpakfire/libpakfire.sym b/src/libpakfire/libpakfire.sym index 0297a9b21..e7e38f4a8 100644 --- a/src/libpakfire/libpakfire.sym +++ b/src/libpakfire/libpakfire.sym @@ -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; diff --git a/src/libpakfire/request.c b/src/libpakfire/request.c index d1547b4a0..0d70d91b2 100644 --- a/src/libpakfire/request.c +++ b/src/libpakfire/request.c @@ -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); }