]> git.ipfire.org Git - pakfire.git/commitdiff
libpakfire: Make Pakfire parent object of Package
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 16 Jan 2018 00:50:06 +0000 (01:50 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 16 Jan 2018 00:50:06 +0000 (01:50 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
15 files changed:
src/_pakfire/package.c
src/_pakfire/package.h
src/_pakfire/relation.c
src/_pakfire/relation.h
src/_pakfire/repo.c
src/libpakfire/include/pakfire/package.h
src/libpakfire/include/pakfire/packagelist.h
src/libpakfire/include/pakfire/relation.h
src/libpakfire/package.c
src/libpakfire/packagelist.c
src/libpakfire/relation.c
src/libpakfire/repo.c
src/libpakfire/request.c
src/libpakfire/selector.c
src/libpakfire/step.c

index 3be41aee0bb31659f22a628d5c18f6008d1012c1..0aa303e2af9f6bb5a050444032e4bf9a9422f44e 100644 (file)
 #include <pakfire/util.h>
 
 #include "package.h"
+#include "pakfire.h"
 #include "relation.h"
 #include "repo.h"
 
-PyObject* new_package(PoolObject* pool, Id id) {
-       PyObject* args = Py_BuildValue("Oi", (PyObject *)pool, id);
+PyObject* new_package(PakfireObject* pakfire, Id id) {
+       PyObject* args = Py_BuildValue("Oi", (PyObject *)pakfire, id);
        PyObject* repo = PyObject_CallObject((PyObject *)&PackageType, args);
 
        Py_DECREF(args);
@@ -42,7 +43,7 @@ PyObject* new_package(PoolObject* pool, Id id) {
 static PyObject* Package_new(PyTypeObject* type, PyObject* args, PyObject* kwds) {
        PackageObject* self = (PackageObject *)type->tp_alloc(type, 0);
        if (self) {
-               self->pool = NULL;
+               self->pakfire = NULL;
                self->package = NULL;
        }
 
@@ -50,23 +51,23 @@ static PyObject* Package_new(PyTypeObject* type, PyObject* args, PyObject* kwds)
 }
 
 static void Package_dealloc(PackageObject* self) {
-       if (self->package)
-               pakfire_package_unref(self->package);
+       pakfire_package_unref(self->package);
+       Py_XDECREF(self->pakfire);
 
        Py_TYPE(self)->tp_free((PyObject *)self);
 }
 
 static int Package_init(PackageObject* self, PyObject* args, PyObject* kwds) {
-       PyObject* pool;
+       PakfireObject* pakfire;
        int id = 0;
 
-       if (!PyArg_ParseTuple(args, "O!|i", &PoolType, &pool, &id))
+       if (!PyArg_ParseTuple(args, "O!|i", &PakfireType, &pakfire, &id))
                return -1;
 
-       self->pool = (PoolObject *)pool;
-       Py_INCREF(self->pool);
+       self->pakfire = pakfire;
+       Py_INCREF(self->pakfire);
 
-       self->package = pakfire_package_create(self->pool->pool, (Id)id);
+       self->package = pakfire_package_create(self->pakfire->pakfire, (Id)id);
 
        return 0;
 }
@@ -476,7 +477,7 @@ static PyObject* Package_get_location(PackageObject* self) {
        return str;
 }
 
-static PyObject* PyList_FromRelationList(PoolObject* pool, PakfireRelationList relationlist) {
+static PyObject* PyList_FromRelationList(PakfireObject* pakfire, PakfireRelationList relationlist) {
        PyObject* list = PyList_New(0);
        if (list == NULL)
                return NULL;
@@ -485,7 +486,7 @@ static PyObject* PyList_FromRelationList(PoolObject* pool, PakfireRelationList r
 
        for (int i = 0; i < count; i++) {
                PakfireRelation relation = pakfire_relationlist_get_clone(relationlist, i);
-               PyObject* relation_obj = new_relation(pool, pakfire_relation_id(relation));
+               PyObject* relation_obj = new_relation(pakfire, pakfire_relation_id(relation));
 
                pakfire_relation_free(relation);
                if (relation_obj == NULL)
@@ -505,14 +506,14 @@ fail:
        return NULL;
 }
 
-static PakfireRelationList PyList_AsRelationList(PoolObject* pool, PyObject* value) {
+static PakfireRelationList PyList_AsRelationList(PakfireObject* pakfire, PyObject* value) {
        if (!PySequence_Check(value)) {
                PyErr_SetString(PyExc_AttributeError, "Expected a sequence.");
                return NULL;
        }
 
        const int length = PySequence_Length(value);
-       PakfireRelationList relationlist = pakfire_relationlist_create(pool->pool);
+       PakfireRelationList relationlist = pakfire_relationlist_create(pakfire->pakfire);
 
        for (int i = 0; i < length; i++) {
                PyObject* item = PySequence_GetItem(value, i);
@@ -537,14 +538,14 @@ static PakfireRelationList PyList_AsRelationList(PoolObject* pool, PyObject* val
 static PyObject* Package_get_provides(PackageObject* self) {
        PakfireRelationList relationlist = pakfire_package_get_provides(self->package);
 
-       PyObject* list = PyList_FromRelationList(self->pool, relationlist);
+       PyObject* list = PyList_FromRelationList(self->pakfire, relationlist);
        pakfire_relationlist_free(relationlist);
 
        return list;
 }
 
 static int Package_set_provides(PackageObject* self, PyObject* value) {
-       PakfireRelationList relationlist = PyList_AsRelationList(self->pool, value);
+       PakfireRelationList relationlist = PyList_AsRelationList(self->pakfire, value);
        if (!relationlist)
                return -1;
 
@@ -568,14 +569,14 @@ static PyObject* Package_add_provides(PackageObject* self, PyObject* args) {
 static PyObject* Package_get_requires(PackageObject* self) {
        PakfireRelationList relationlist = pakfire_package_get_requires(self->package);
 
-       PyObject* list = PyList_FromRelationList(self->pool, relationlist);
+       PyObject* list = PyList_FromRelationList(self->pakfire, relationlist);
        pakfire_relationlist_free(relationlist);
 
        return list;
 }
 
 static int Package_set_requires(PackageObject* self, PyObject* value) {
-       PakfireRelationList relationlist = PyList_AsRelationList(self->pool, value);
+       PakfireRelationList relationlist = PyList_AsRelationList(self->pakfire, value);
        if (!relationlist)
                return -1;
 
@@ -599,14 +600,14 @@ static PyObject* Package_add_requires(PackageObject* self, PyObject* args) {
 static PyObject* Package_get_obsoletes(PackageObject* self) {
        PakfireRelationList relationlist = pakfire_package_get_obsoletes(self->package);
 
-       PyObject* list = PyList_FromRelationList(self->pool, relationlist);
+       PyObject* list = PyList_FromRelationList(self->pakfire, relationlist);
        pakfire_relationlist_free(relationlist);
 
        return list;
 }
 
 static int Package_set_obsoletes(PackageObject* self, PyObject* value) {
-       PakfireRelationList relationlist = PyList_AsRelationList(self->pool, value);
+       PakfireRelationList relationlist = PyList_AsRelationList(self->pakfire, value);
        if (!relationlist)
                return -1;
 
@@ -630,14 +631,14 @@ static PyObject* Package_add_obsoletes(PackageObject* self, PyObject* args) {
 static PyObject* Package_get_conflicts(PackageObject* self) {
        PakfireRelationList relationlist = pakfire_package_get_conflicts(self->package);
 
-       PyObject* list = PyList_FromRelationList(self->pool, relationlist);
+       PyObject* list = PyList_FromRelationList(self->pakfire, relationlist);
        pakfire_relationlist_free(relationlist);
 
        return list;
 }
 
 static int Package_set_conflicts(PackageObject* self, PyObject* value) {
-       PakfireRelationList relationlist = PyList_AsRelationList(self->pool, value);
+       PakfireRelationList relationlist = PyList_AsRelationList(self->pakfire, value);
        if (!relationlist)
                return -1;
 
@@ -661,14 +662,14 @@ static PyObject* Package_add_conflicts(PackageObject* self, PyObject* args) {
 static PyObject* Package_get_recommends(PackageObject* self) {
        PakfireRelationList relationlist = pakfire_package_get_recommends(self->package);
 
-       PyObject* list = PyList_FromRelationList(self->pool, relationlist);
+       PyObject* list = PyList_FromRelationList(self->pakfire, relationlist);
        pakfire_relationlist_free(relationlist);
 
        return list;
 }
 
 static int Package_set_recommends(PackageObject* self, PyObject* value) {
-       PakfireRelationList relationlist = PyList_AsRelationList(self->pool, value);
+       PakfireRelationList relationlist = PyList_AsRelationList(self->pakfire, value);
        if (!relationlist)
                return -1;
 
@@ -692,14 +693,14 @@ static PyObject* Package_add_recommends(PackageObject* self, PyObject* args) {
 static PyObject* Package_get_suggests(PackageObject* self) {
        PakfireRelationList relationlist = pakfire_package_get_suggests(self->package);
 
-       PyObject* list = PyList_FromRelationList(self->pool, relationlist);
+       PyObject* list = PyList_FromRelationList(self->pakfire, relationlist);
        pakfire_relationlist_free(relationlist);
 
        return list;
 }
 
 static int Package_set_suggests(PackageObject* self, PyObject* value) {
-       PakfireRelationList relationlist = PyList_AsRelationList(self->pool, value);
+       PakfireRelationList relationlist = PyList_AsRelationList(self->pakfire, value);
        if (!relationlist)
                return -1;
 
index d88c8cd495de55ae26d2fa5eff5267bb2fff0a23..48b29a8459bcaef18ef4e1e82494e24d4a1d1c89 100644 (file)
 #include <solv/pooltypes.h>
 
 #include "pakfire.h"
-#include "pool.h"
 
 typedef struct {
        PyObject_HEAD
        PakfireObject* pakfire;
-       PoolObject* pool;
        PakfirePackage package;
 } PackageObject;
 
 extern PyTypeObject PackageType;
 
-PyObject* new_package(PoolObject* pool, Id id);
+PyObject* new_package(PakfireObject* pakfire, Id id);
 
 #endif /* PYTHON_PAKFIRE_PACKAGE_H */
index 1b5b11ce0559c3e477ba6e1235ea4496f3f1d18b..b0498fd1c942b396e6caff9abd6900a5aa316bab 100644 (file)
@@ -44,9 +44,9 @@ static RelationObject* Relation_new_core(PyTypeObject* type, PoolObject* pool) {
        return self;
 }
 
-PyObject* new_relation(PoolObject* pool, Id id) {
-       RelationObject* relation = Relation_new_core(&RelationType, pool);
-       relation->relation = pakfire_relation_create_from_id(pool->pool, id);
+PyObject* new_relation(PakfireObject* pakfire, Id id) {
+       RelationObject* relation = Relation_new_core(&RelationType, pakfire);
+       relation->relation = pakfire_relation_create_from_id(pakfire->pakfire, id);
 
        return (PyObject *)relation;
 }
@@ -115,7 +115,7 @@ static PyObject* Relation_get_providers(RelationObject* self) {
        for (unsigned int i = 0; i < pakfire_packagelist_count(packagelist); i++) {
                PakfirePackage package = pakfire_packagelist_get(packagelist, i);
 
-               PyObject* obj = new_package(self->pool, pakfire_package_id(package));
+               PyObject* obj = new_package(self->pakfire, pakfire_package_id(package));
                PyList_Append(list, obj);
 
                pakfire_package_unref(package);
index 2a236ac60f68d838913120fd9d56402d680480c0..2c184149556f29a4cd2ab862f49f44fcb5bdf152 100644 (file)
 #include <solv/pooltypes.h>
 #include <pakfire/relation.h>
 
+#include "pakfire.h"
 #include "pool.h"
 
 typedef struct {
     PyObject_HEAD
+    PakfireObject* pakfire;
     PoolObject* pool;
     PakfireRelation relation;
 
@@ -40,6 +42,6 @@ typedef struct {
 
 extern PyTypeObject RelationType;
 
-PyObject* new_relation(PoolObject* pool, Id id);
+PyObject* new_relation(PakfireObject* pakfire, Id id);
 
 #endif /* PYTHON_PAKFIRE_RELATION_H */
index 11669b63b5b9c61b6bff5203fb01f8ecd3fd0592..9d96cc3f73ae44931fb8fd0279fa7de9b849d9bc 100644 (file)
@@ -220,11 +220,9 @@ static PyObject* Repo__add_package(RepoObject* self, PyObject* args) {
        if (!PyArg_ParseTuple(args, "sss", &name, &evr, &arch))
                return NULL;
 
-       PakfirePool pool = pakfire_repo_get_pool(self->repo);
-       PakfirePackage pkg = pakfire_package_create2(pool, self->repo, name, evr, arch);
+       PakfirePackage pkg = pakfire_package_create2(self->pakfire->pakfire, self->repo, name, evr, arch);
 
-       // XXX must be self->pakfire instead of NULL
-       return new_package(NULL /* self->pakfire */, pakfire_package_id(pkg));
+       return new_package(self->pakfire, pakfire_package_id(pkg));
 }
 
 static PyObject* Repo_cache_age(RepoObject* self, PyObject* args) {
index e49998ed8cdcecfbe88997235695a56cca1ce182..b6835146c8235b862fa1e9aa0d86fc7910fc91e3 100644 (file)
 
 #include <pakfire/relation.h>
 #include <pakfire/relationlist.h>
-#include <pakfire/pool.h>
 #include <pakfire/types.h>
 
-PakfirePackage pakfire_package_create(PakfirePool pool, Id id);
-PakfirePackage pakfire_package_create2(PakfirePool pool, PakfireRepo repo, const char* name, const char* evr, const char* arch);
+PakfirePackage pakfire_package_create(Pakfire pakfire, Id id);
+PakfirePackage pakfire_package_create2(Pakfire pakfire, PakfireRepo repo, const char* name, const char* evr, const char* arch);
 
 PakfirePackage pakfire_package_ref(PakfirePackage pkg);
 PakfirePackage pakfire_package_unref(PakfirePackage pkg);
index c6582c14c7b97cfd236f03c87dec5ef868b717bb..5ce7a0eeaa420f5cca5c54faea0aa2a7defb4380 100644 (file)
@@ -39,7 +39,7 @@ void pakfire_packagelist_push_if_not_exists(PakfirePackageList list, PakfirePack
 
 #ifdef PAKFIRE_PRIVATE
 
-PakfirePackageList pakfire_packagelist_from_queue(PakfirePool _pool, Queue* q);
+PakfirePackageList pakfire_packagelist_from_queue(Pakfire pakfire, Queue* q);
 
 #endif
 
index 1ff7a1e9c747e1a4e157c89a068faeec586b2a02..9542a4a8bd599d1894d583cd84618c57c567ae08 100644 (file)
@@ -42,6 +42,7 @@ int pakfire_relation2queue(const PakfireRelation relation, Queue* queue, int sol
 #ifdef PAKFIRE_PRIVATE
 
 struct _PakfireRelation {
+       Pakfire pakfire;
        PakfirePool pool;
        Id id;
 };
index 2f350d5f6d5388a8d502475a14079a0e0b51a7ca..59fda486e7dca6bc0336c3ea8f847e6ad462fff8 100644 (file)
@@ -29,6 +29,7 @@
 #include <solv/repo.h>
 #include <solv/solvable.h>
 
+#include <pakfire/archive.h>
 #include <pakfire/cache.h>
 #include <pakfire/constants.h>
 #include <pakfire/file.h>
@@ -36,6 +37,7 @@
 #include <pakfire/logging.h>
 #include <pakfire/package.h>
 #include <pakfire/packagecache.h>
+#include <pakfire/pakfire.h>
 #include <pakfire/pool.h>
 #include <pakfire/private.h>
 #include <pakfire/relation.h>
 #include <pakfire/util.h>
 
 struct _PakfirePackage {
-       PakfirePool pool;
+       Pakfire pakfire;
        Id id;
        PakfireFile filelist;
+       PakfireArchive archive;
        int nrefs;
 };
 
 static Pool* pakfire_package_get_solv_pool(PakfirePackage pkg) {
-    return pakfire_pool_get_solv_pool(pkg->pool);
+       PakfirePool pool = pakfire_get_pool(pkg->pakfire);
+
+    Pool* p = pakfire_pool_get_solv_pool(pool);
+       pakfire_pool_unref(pool);
+
+       return p;
 }
 
-static void pakfire_package_add_self_provides(PakfirePool pool, PakfirePackage pkg, const char* name, const char* evr) {
+static void pakfire_package_add_self_provides(Pakfire pakfire, PakfirePackage pkg, const char* name, const char* evr) {
+       PakfirePool pool = pakfire_get_pool(pakfire);
+
        PakfireRelation relation = pakfire_relation_create(pool, name, PAKFIRE_EQ, evr);
        pakfire_package_add_provides(pkg, relation);
 
        pakfire_relation_free(relation);
+       pakfire_pool_unref(pool);
 }
 
-PAKFIRE_EXPORT PakfirePackage pakfire_package_create(PakfirePool pool, Id id) {
+PAKFIRE_EXPORT PakfirePackage pakfire_package_create(Pakfire pakfire, Id id) {
        PakfirePackage pkg = pakfire_calloc(1, sizeof(*pkg));
        if (pkg) {
                DEBUG("Allocated Package at %p\n", pkg);
 
-               pkg->pool = pakfire_pool_ref(pool);
+               pkg->pakfire = pakfire_ref(pakfire);
                pkg->id = id;
 
                // Initialize reference counter
@@ -77,21 +88,22 @@ PAKFIRE_EXPORT PakfirePackage pakfire_package_create(PakfirePool pool, Id id) {
        return pkg;
 }
 
-PAKFIRE_EXPORT PakfirePackage pakfire_package_create2(PakfirePool pool, PakfireRepo repo, const char* name, const char* evr, const char* arch) {
+PAKFIRE_EXPORT PakfirePackage pakfire_package_create2(Pakfire pakfire, PakfireRepo repo, const char* name, const char* evr, const char* arch) {
        PakfirePackage pkg = pakfire_repo_add_package(repo);
 
        pakfire_package_set_name(pkg, name);
        pakfire_package_set_evr(pkg, evr);
        pakfire_package_set_arch(pkg, arch);
 
-       pakfire_package_add_self_provides(pool, pkg, name, evr);
+       pakfire_package_add_self_provides(pakfire, pkg, name, evr);
 
        return pkg;
 }
 
 static void pakfire_package_free(PakfirePackage pkg) {
-       pakfire_pool_unref(pkg->pool);
+       pakfire_archive_unref(pkg->archive);
        pakfire_package_filelist_remove(pkg);
+       pakfire_unref(pkg->pakfire);
        pakfire_free(pkg);
 
        DEBUG("Released Package at %p\n", pkg);
@@ -515,7 +527,9 @@ static PakfireRelationList pakfire_package_get_relationlist(PakfirePackage pkg,
        Solvable* s = get_solvable(pkg);
        solvable_lookup_idarray(s, type, &q);
 
-       PakfireRelationList relationlist = pakfire_relationlist_from_queue(pkg->pool, q);
+       PakfirePool pool = pakfire_get_pool(pkg->pakfire);
+       PakfireRelationList relationlist = pakfire_relationlist_from_queue(pool, q);
+       pakfire_pool_unref(pool);
 
        queue_free(&q);
 
@@ -632,7 +646,7 @@ PAKFIRE_EXPORT void pakfire_package_add_suggests(PakfirePackage pkg, PakfireRela
 PAKFIRE_EXPORT PakfireRepo pakfire_package_get_repo(PakfirePackage pkg) {
        Solvable* s = get_solvable(pkg);
 
-       return pakfire_repo_create_from_repo(pkg->pool, s->repo);
+       return pakfire_repo_create_from_repo(pkg->pakfire, s->repo);
 }
 
 PAKFIRE_EXPORT void pakfire_package_set_repo(PakfirePackage pkg, PakfireRepo repo) {
@@ -853,7 +867,10 @@ PAKFIRE_EXPORT char* pakfire_package_dump(PakfirePackage pkg, int flags) {
 }
 
 PAKFIRE_EXPORT int pakfire_package_is_cached(PakfirePackage pkg) {
-       PakfireCache cache = pakfire_pool_get_cache(pkg->pool);
+       PakfirePool pool = pakfire_get_pool(pkg->pakfire);
+       PakfireCache cache = pakfire_pool_get_cache(pool);
+       pakfire_pool_unref(pool);
+
        if (!cache)
                return 1;
 
@@ -861,7 +878,10 @@ PAKFIRE_EXPORT int pakfire_package_is_cached(PakfirePackage pkg) {
 }
 
 PAKFIRE_EXPORT char* pakfire_package_get_cache_path(PakfirePackage pkg) {
-       PakfireCache cache = pakfire_pool_get_cache(pkg->pool);
+       PakfirePool pool = pakfire_get_pool(pkg->pakfire);
+       PakfireCache cache = pakfire_pool_get_cache(pool);
+       pakfire_pool_unref(pool);
+
        if (!cache)
                return NULL;
 
@@ -892,6 +912,21 @@ out:
        return cache_path;
 }
 
+PAKFIRE_EXPORT PakfireArchive pakfire_package_get_archive(PakfirePackage pkg) {
+       // Return the package if it has already been opened
+       if (pkg->archive)
+               return pakfire_archive_ref(pkg->archive);
+
+       // Otherwise open the archive from the cache
+       char* path = pakfire_package_get_cache_full_path(pkg);
+       PakfireArchive archive = pakfire_archive_open(pkg->pakfire, path);
+
+       // Free resources
+       pakfire_free(path);
+
+       return archive;
+}
+
 static PakfireFile pakfire_package_fetch_legacy_filelist(PakfirePackage pkg) {
        pakfire_package_internalize_repo(pkg);
 
index 560e8ffdddcce0f0983b8777c74f2762fd464c2b..a6d7867924d96ef6dae81684c6354b8d7e193086 100644 (file)
@@ -28,6 +28,7 @@
 #include <pakfire/logging.h>
 #include <pakfire/package.h>
 #include <pakfire/packagelist.h>
+#include <pakfire/pakfire.h>
 #include <pakfire/private.h>
 #include <pakfire/types.h>
 #include <pakfire/util.h>
@@ -120,19 +121,22 @@ PAKFIRE_EXPORT void pakfire_packagelist_push_if_not_exists(PakfirePackageList li
        pakfire_packagelist_push(list, pkg);
 }
 
-PAKFIRE_EXPORT PakfirePackageList pakfire_packagelist_from_queue(PakfirePool _pool, Queue* q) {
+PAKFIRE_EXPORT PakfirePackageList pakfire_packagelist_from_queue(Pakfire pakfire, Queue* q) {
+       PakfirePool _pool = pakfire_get_pool(pakfire);
        PakfirePackageList list = pakfire_packagelist_create();
 
        Pool* pool = pakfire_pool_get_solv_pool(_pool);
        Id p, pp;
        for (int i = 0; i < q->count; i += 2) {
                FOR_JOB_SELECT(p, pp, q->elements[i], q->elements[i + 1]) {
-                       PakfirePackage pkg = pakfire_package_create(_pool, p);
+                       PakfirePackage pkg = pakfire_package_create(pakfire, p);
                        pakfire_packagelist_push(list, pkg);
 
                        pakfire_package_unref(pkg);
                }
        }
 
+       pakfire_pool_unref(_pool);
+
        return list;
 }
index a1fe2c3a7b51bf63a8637e739db81fd7b3de6f2f..0411395a58a1c99d56a9a212ccf0d8c952e8ec0e 100644 (file)
@@ -100,7 +100,7 @@ PAKFIRE_EXPORT PakfirePackageList pakfire_relation_providers(PakfireRelation rel
 
        pakfire_relation2queue(relation, &q, 0);
 
-       PakfirePackageList list = pakfire_packagelist_from_queue(relation->pool, &q);
+       PakfirePackageList list = pakfire_packagelist_from_queue(relation->pakfire, &q);
 
        queue_free(&q);
 
index 518fc2ff0e9e53a658a0b7681e2befcbc3dc25da..a386bce0311135bcbd2028e56ef63b4ae16bce92 100644 (file)
@@ -221,9 +221,7 @@ PAKFIRE_EXPORT int pakfire_repo_get_enabled(PakfireRepo repo) {
 PAKFIRE_EXPORT void pakfire_repo_set_enabled(PakfireRepo repo, int enabled) {
        repo->repo->disabled = !enabled;
 
-       PakfirePool pool = pakfire_repo_get_pool(repo);
-       pakfire_pool_has_changed(pool);
-       pakfire_pool_unref(pool);
+       pakfire_pool_has_changed(repo->pakfire);
 }
 
 PAKFIRE_EXPORT int pakfire_repo_get_priority(PakfireRepo repo) {
@@ -403,9 +401,7 @@ PAKFIRE_EXPORT int pakfire_repo_read_solv_fp(PakfireRepo repo, FILE *f, int flag
                        return PAKFIRE_E_SOLV_CORRUPTED;
        }
 
-       PakfirePool pool = pakfire_get_pool(repo->pakfire);
-       pakfire_pool_has_changed(pool);
-       pakfire_pool_unref(pool);
+       pakfire_pool_has_changed(repo->pakfire);
 
        return ret;
 }
@@ -431,11 +427,7 @@ PAKFIRE_EXPORT int pakfire_repo_write_solv_fp(PakfireRepo repo, FILE *f, int fla
 PAKFIRE_EXPORT PakfirePackage pakfire_repo_add_package(PakfireRepo repo) {
        Id id = repo_add_solvable(repo->repo);
 
-       PakfirePool pool = pakfire_get_pool(repo->pakfire);
-       PakfirePackage pkg = pakfire_package_create(pool, id);
-       pakfire_pool_unref(pool);
-
-       return pkg;
+       return pakfire_package_create(repo->pakfire, id);
 }
 
 PAKFIRE_EXPORT PakfireRepoCache pakfire_repo_get_cache(PakfireRepo repo) {
index f9dc0313de503cd7c7771af4be461c05e996b9ef..77408585c9a057e5062b4eb640911bb03015c08d 100644 (file)
@@ -137,9 +137,7 @@ static int solve(PakfireRequest request, Queue* queue) {
                request->transaction = NULL;
        }
 
-       PakfirePool pool = pakfire_get_pool(request->pakfire);
-       pakfire_pool_apply_changes(pool);
-       pakfire_pool_unref(pool);
+       pakfire_pool_apply_changes(request->pakfire);
 
        // Save time when we starting solving
        clock_t solving_start = clock();
index 9b313051fe804368ccb49868f2e19cf04bfe3c43..60910f68730126beefc049baad26d62de7432acf 100644 (file)
@@ -29,6 +29,7 @@
 #include <pakfire/logging.h>
 #include <pakfire/package.h>
 #include <pakfire/packagelist.h>
+#include <pakfire/pakfire.h>
 #include <pakfire/pool.h>
 #include <pakfire/private.h>
 #include <pakfire/selector.h>
@@ -36,6 +37,7 @@
 #include <pakfire/util.h>
 
 struct _PakfireSelector {
+       Pakfire pakfire;
        PakfirePool pool;
        PakfireFilter f_name;
        PakfireFilter f_provides;
@@ -161,7 +163,7 @@ PAKFIRE_EXPORT PakfirePackageList pakfire_selector_providers(PakfireSelector sel
 
        pakfire_selector2queue(selector, &q, 0);
 
-       PakfirePackageList list = pakfire_packagelist_from_queue(selector->pool, &q);
+       PakfirePackageList list = pakfire_packagelist_from_queue(selector->pakfire, &q);
 
        queue_free(&q);
 
@@ -310,7 +312,7 @@ PAKFIRE_EXPORT int pakfire_selector2queue(const PakfireSelector selector, Queue*
                goto finish;
        }
 
-       pakfire_pool_apply_changes(pool);
+       pakfire_pool_apply_changes(selector->pakfire);
 
        ret = filter_name2queue(pool, selector->f_name, &queue_selector);
        if (ret)
index ee55c77fbbd4d946de0d8c597e54cf429981b2cc..f30725a6f46af002779dc41a68bf707963700301 100644 (file)
@@ -90,9 +90,7 @@ PAKFIRE_EXPORT PakfireStep pakfire_step_create(PakfireTransaction transaction, I
                step->type = get_type(t, id);
 
                // Get the package
-               PakfirePool pool = pakfire_get_pool(step->pakfire);
-               step->package = pakfire_package_create(pool, id);
-               pakfire_pool_unref(pool);
+               step->package = pakfire_package_create(step->pakfire, id);
        }
 
        return step;