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;
}
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) {
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);
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);
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;
// 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);
}
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(
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));
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);
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);
}