From: Michael Tremer Date: Mon, 15 Jan 2018 19:29:56 +0000 (+0100) Subject: libpakfire: Make Pakfire parent object of Request X-Git-Tag: 0.9.28~1285^2~1181 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=19f3d1062a37b582ec0718e3384bbfeb4132ce04;p=pakfire.git libpakfire: Make Pakfire parent object of Request Signed-off-by: Michael Tremer --- diff --git a/src/_pakfire/request.c b/src/_pakfire/request.c index a79f18188..13e4bfdd3 100644 --- a/src/_pakfire/request.c +++ b/src/_pakfire/request.c @@ -26,6 +26,7 @@ #include "errors.h" #include "package.h" +#include "pakfire.h" #include "problem.h" #include "relation.h" #include "request.h" @@ -36,7 +37,7 @@ static PyObject* Request_new(PyTypeObject* type, PyObject* args, PyObject* kwds) RequestObject* self = (RequestObject *)type->tp_alloc(type, 0); if (self) { self->request = NULL; - self->pool = NULL; + self->pakfire = NULL; } return (PyObject *)self; @@ -46,20 +47,20 @@ static void Request_dealloc(RequestObject* self) { if (self->request) pakfire_request_unref(self->request); - Py_XDECREF(self->pool); + Py_XDECREF(self->pakfire); Py_TYPE(self)->tp_free((PyObject *)self); } static int Request_init(RequestObject* self, PyObject* args, PyObject* kwds) { - PyObject* pool; + PakfireObject* pakfire; - if (!PyArg_ParseTuple(args, "O!", &PoolType, &pool)) + if (!PyArg_ParseTuple(args, "O!", &PakfireType, &pakfire)) return -1; - self->pool = (PoolObject *)pool; - Py_INCREF(self->pool); + self->pakfire = pakfire; + Py_INCREF(self->pakfire); - self->request = pakfire_request_create(self->pool->pool); + self->request = pakfire_request_create(self->pakfire->pakfire); return 0; } @@ -264,13 +265,6 @@ static PyObject* Request_solve(RequestObject* self, PyObject* args, PyObject *kw return new_transaction(self, transaction); } -static PyObject* Request_get_pool(RequestObject* self) { - PoolObject* pool = self->pool; - Py_INCREF(pool); - - return (PyObject *)pool; -} - static struct PyMethodDef Request_methods[] = { { "install", @@ -325,13 +319,6 @@ static struct PyGetSetDef Request_getsetters[] = { NULL, NULL }, - { - "pool", - (getter)Request_get_pool, - NULL, - NULL, - NULL - }, { NULL }, }; diff --git a/src/_pakfire/request.h b/src/_pakfire/request.h index 6ced13645..178248219 100644 --- a/src/_pakfire/request.h +++ b/src/_pakfire/request.h @@ -25,15 +25,12 @@ #include -#include "pool.h" +#include "pakfire.h" typedef struct { PyObject_HEAD - PoolObject* pool; + PakfireObject* pakfire; PakfireRequest request; - - // XXX COMPAT - Pool* _pool; } RequestObject; extern PyTypeObject RequestType; diff --git a/src/_pakfire/step.c b/src/_pakfire/step.c index 612febb41..39c78fee0 100644 --- a/src/_pakfire/step.c +++ b/src/_pakfire/step.c @@ -99,7 +99,8 @@ static PyObject* Step_repr(StepObject* self) { static PyObject* Step_get_package(StepObject* self) { PakfirePackage package = pakfire_step_get_package(self->step); - PyObject* obj = new_package(self->transaction->request->pool, pakfire_package_id(package)); + // XXX NULL must be the pool object + PyObject* obj = new_package(NULL, pakfire_package_id(package)); pakfire_package_unref(package); return obj; diff --git a/src/libpakfire/include/pakfire/pakfire.h b/src/libpakfire/include/pakfire/pakfire.h index e62dc73a4..b892674a3 100644 --- a/src/libpakfire/include/pakfire/pakfire.h +++ b/src/libpakfire/include/pakfire/pakfire.h @@ -38,4 +38,12 @@ PakfirePool pakfire_get_pool(Pakfire pakfire); PakfireRepo pakfire_get_installed_repo(Pakfire pakfire); void pakfire_set_installed_repo(Pakfire pakfire, PakfireRepo repo); +#ifdef PAKFIRE_PRIVATE + +#include + +Pool* pakfire_get_solv_pool(Pakfire pakfire); + +#endif + #endif /* PAKFIRE_PAKFIRE_H */ diff --git a/src/libpakfire/include/pakfire/request.h b/src/libpakfire/include/pakfire/request.h index b4a4e5b6b..6febc12d6 100644 --- a/src/libpakfire/include/pakfire/request.h +++ b/src/libpakfire/include/pakfire/request.h @@ -40,7 +40,7 @@ enum _pakfire_solver_flags { PAKFIRE_SOLVER_ALLOW_VENDORCHANGE = 1 << 5, }; -PakfireRequest pakfire_request_create(PakfirePool pool); +PakfireRequest pakfire_request_create(Pakfire pakfire); PakfireRequest pakfire_request_ref(PakfireRequest request); PakfireRequest pakfire_request_unref(PakfireRequest request); diff --git a/src/libpakfire/pakfire.c b/src/libpakfire/pakfire.c index a65c1e004..d6a82589d 100644 --- a/src/libpakfire/pakfire.c +++ b/src/libpakfire/pakfire.c @@ -100,6 +100,10 @@ PAKFIRE_EXPORT PakfirePool pakfire_get_pool(Pakfire pakfire) { return pakfire_pool_ref(pakfire->pool); } +Pool* pakfire_get_solv_pool(Pakfire pakfire) { + return pakfire_pool_get_solv_pool(pakfire->pool); +} + PAKFIRE_EXPORT PakfireRepo pakfire_get_installed_repo(Pakfire pakfire) { Pool* p = pakfire_pool_get_solv_pool(pakfire->pool); if (!p->installed) diff --git a/src/libpakfire/request.c b/src/libpakfire/request.c index 9a6eb11c9..c6c3788a2 100644 --- a/src/libpakfire/request.c +++ b/src/libpakfire/request.c @@ -28,6 +28,7 @@ #include #include +#include #include #include #include @@ -37,20 +38,20 @@ #include struct _PakfireRequest { - PakfirePool pool; + Pakfire pakfire; Queue queue; Solver* solver; Transaction* transaction; int nrefs; }; -PAKFIRE_EXPORT PakfireRequest pakfire_request_create(PakfirePool pool) { +PAKFIRE_EXPORT PakfireRequest pakfire_request_create(Pakfire pakfire) { PakfireRequest request = pakfire_calloc(1, sizeof(*request)); if (request) { DEBUG("Allocated Request at %p\n", request); request->nrefs = 1; - request->pool = pakfire_pool_ref(pool); + request->pakfire = pakfire_ref(pakfire); queue_init(&request->queue); } @@ -64,7 +65,7 @@ PAKFIRE_EXPORT PakfireRequest pakfire_request_ref(PakfireRequest request) { } static void pakfire_request_free(PakfireRequest request) { - pakfire_pool_unref(request->pool); + pakfire_unref(request->pakfire); if (request->transaction) transaction_free(request->transaction); @@ -90,7 +91,7 @@ PAKFIRE_EXPORT PakfireRequest pakfire_request_unref(PakfireRequest request) { } PAKFIRE_EXPORT PakfirePool pakfire_request_get_pool(PakfireRequest request) { - return pakfire_pool_ref(request->pool); + return pakfire_get_pool(request->pakfire); } Solver* pakfire_request_get_solver(PakfireRequest request) { @@ -98,7 +99,7 @@ Solver* pakfire_request_get_solver(PakfireRequest request) { } static void init_solver(PakfireRequest request, int flags) { - Pool* p = pakfire_pool_get_solv_pool(request->pool); + Pool* p = pakfire_get_solv_pool(request->pakfire); Solver* solver = solver_create(p); @@ -136,7 +137,9 @@ static int solve(PakfireRequest request, Queue* queue) { request->transaction = NULL; } - pakfire_pool_apply_changes(request->pool); + PakfirePool pool = pakfire_get_pool(request->pakfire); + pakfire_pool_apply_changes(pool); + pakfire_pool_unref(pool); // Save time when we starting solving clock_t solving_start = clock(); @@ -177,7 +180,10 @@ PAKFIRE_EXPORT int pakfire_request_solve(PakfireRequest request, int flags) { } /* turn off implicit obsoletes for installonly packages */ - Queue* installonly = pakfire_pool_get_installonly_queue(request->pool); + PakfirePool pool = pakfire_get_pool(request->pakfire); + Queue* installonly = pakfire_pool_get_installonly_queue(pool); + pakfire_pool_unref(pool); + for (int i = 0; i < installonly->count; i++) queue_push2(&queue, SOLVER_MULTIVERSION|SOLVER_SOLVABLE_PROVIDES, installonly->elements[i]); @@ -211,7 +217,11 @@ PAKFIRE_EXPORT PakfireTransaction pakfire_request_get_transaction(PakfireRequest if (!request->transaction) return NULL; - return pakfire_transaction_create(request->pool, request->transaction); + PakfirePool pool = pakfire_get_pool(request->pakfire); + PakfireTransaction transaction = pakfire_transaction_create(pool, request->transaction); + pakfire_pool_unref(pool); + + return transaction; } PAKFIRE_EXPORT int pakfire_request_install(PakfireRequest request, PakfirePackage package) { diff --git a/src/pakfire/base.py b/src/pakfire/base.py index b5aa828ac..adeccdfff 100644 --- a/src/pakfire/base.py +++ b/src/pakfire/base.py @@ -164,7 +164,7 @@ class PakfireContext(object): # Detect any errors in the dependency tree. # For that we create an empty request and solver and try to solve # something. - request = _pakfire.Request(self.pakfire.pool) + request = _pakfire.Request(self.pakfire) request.verify() return request.solve(**kwargs) @@ -203,7 +203,7 @@ class PakfireContext(object): # Transactions def install(self, requires, **kwargs): - request = _pakfire.Request(self.pakfire.pool) + request = _pakfire.Request(self.pakfire) # XXX handle files and URLs @@ -220,7 +220,7 @@ class PakfireContext(object): raise NotImplementedError def erase(self, pkgs, **kwargs): - request = _pakfire.Request(self.pakfire.pool) + request = _pakfire.Request(self.pakfire) for pkg in pkgs: relation = _pakfire.Relation(self.pakfire.pool, pkg) @@ -229,7 +229,7 @@ class PakfireContext(object): return request.solve(**kwargs) def update(self, reqs=None, excludes=None, **kwargs): - request = _pakfire.Request(self.pakfire.pool) + request = _pakfire.Request(self.pakfire) # Add all packages that should be updated to the request for req in reqs or []: