]> git.ipfire.org Git - pakfire.git/commitdiff
libpakfire: Make Pakfire parent object of Request
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 15 Jan 2018 19:29:56 +0000 (20:29 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 15 Jan 2018 19:29:56 +0000 (20:29 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/_pakfire/request.c
src/_pakfire/request.h
src/_pakfire/step.c
src/libpakfire/include/pakfire/pakfire.h
src/libpakfire/include/pakfire/request.h
src/libpakfire/pakfire.c
src/libpakfire/request.c
src/pakfire/base.py

index a79f181882b78a2c92922716f034b9f2b2b45a56..13e4bfdd3440322dff7e1a2b06009c54f2d0e3b5 100644 (file)
@@ -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 },
 };
 
index 6ced13645cdecd3d263b68903f05349ace322e2e..1782482199e563d11f1adb21d4e709e9184935a5 100644 (file)
 
 #include <pakfire/request.h>
 
-#include "pool.h"
+#include "pakfire.h"
 
 typedef struct {
        PyObject_HEAD
-       PoolObject* pool;
+       PakfireObject* pakfire;
        PakfireRequest request;
-
-       // XXX COMPAT
-       Pool* _pool;
 } RequestObject;
 
 extern PyTypeObject RequestType;
index 612febb41bd5a8c6a24f464ecd76f2669a109ef9..39c78fee0a59c07fbdfbebde990e5a8d3c601959 100644 (file)
@@ -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;
index e62dc73a42c0dc18b8ff5c38bb89f81d56bbb4ae..b892674a3a087e71d3705b914ad357d26e26196c 100644 (file)
@@ -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 <solv/pool.h>
+
+Pool* pakfire_get_solv_pool(Pakfire pakfire);
+
+#endif
+
 #endif /* PAKFIRE_PAKFIRE_H */
index b4a4e5b6b0249b877fb174d853bc6256193ceb0e..6febc12d6cf304132c01debce3a2e06d879c42d5 100644 (file)
@@ -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);
index a65c1e0045bf425d40c3b2d9ed4e78e6bbcb3900..d6a82589dbe8a39233d89a1c0d62890ddaeb8ac5 100644 (file)
@@ -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)
index 9a6eb11c9a49daa8bd36d026bba03d8a29679974..c6c3788a289336ea5fadc16596d36045a6e93180 100644 (file)
@@ -28,6 +28,7 @@
 
 #include <pakfire/logging.h>
 #include <pakfire/package.h>
+#include <pakfire/pakfire.h>
 #include <pakfire/private.h>
 #include <pakfire/problem.h>
 #include <pakfire/request.h>
 #include <pakfire/util.h>
 
 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) {
index b5aa828acbad46b66b9c4b3f908ded43d1e0f7ef..adeccdfff81e5b3fd6f9b9da676425f9845c59a4 100644 (file)
@@ -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 []: