]> git.ipfire.org Git - pakfire.git/commitdiff
packagelist: Decouple for the pakfire object
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 20 Oct 2023 12:20:57 +0000 (12:20 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 20 Oct 2023 12:20:57 +0000 (12:20 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
12 files changed:
src/_pakfire/package.c
src/_pakfire/pakfire.c
src/cli/lib/dump.c
src/cli/lib/info.c
src/cli/lib/provides.c
src/cli/lib/requires.c
src/cli/lib/search.c
src/libpakfire/build.c
src/libpakfire/include/pakfire/packagelist.h
src/libpakfire/package.c
src/libpakfire/packagelist.c
src/libpakfire/pakfire.c

index 8b5aa0942b9b060487efa20cf90a627e106c4061..a0ca9702e25160057b5bf45698e47a7a6720ae3a 100644 (file)
@@ -34,6 +34,8 @@
 #include "repo.h"
 #include "util.h"
 
+extern struct pakfire_ctx* pakfire_ctx;
+
 PyObject* new_package(PyTypeObject* type, struct pakfire_package* pkg) {
        PackageObject* self = (PackageObject *)type->tp_alloc(type, 0);
        if (self) {
@@ -552,10 +554,8 @@ static PyObject* Package_get_reverse_requires(PackageObject* self) {
        PyObject* ret = NULL;
        int r;
 
-       struct pakfire* pakfire = pakfire_package_get_pakfire(self->package);
-
        // Create a new packagelist
-       r = pakfire_packagelist_create(&list, pakfire);
+       r = pakfire_packagelist_create(&list, pakfire_ctx);
        if (r) {
                PyErr_SetFromErrno(PyExc_OSError);
                goto ERROR;
@@ -573,8 +573,6 @@ static PyObject* Package_get_reverse_requires(PackageObject* self) {
 ERROR:
        if (list)
                pakfire_packagelist_unref(list);
-       if (pakfire)
-               pakfire_unref(pakfire);
 
        return ret;
 }
index 0ada88b21003a93d7d5565c491b6e8a7f87ad8b9..d0728be15f2b442b764a54eaeb8b35d5a0060fd5 100644 (file)
@@ -300,7 +300,7 @@ static PyObject* Pakfire_whatprovides(PakfireObject* self, PyObject* args) {
                return NULL;
 
        // Create a new list
-       r = pakfire_packagelist_create(&list, self->pakfire);
+       r = pakfire_packagelist_create(&list, pakfire_ctx);
        if (r) {
                PyErr_SetFromErrno(PyExc_OSError);
                goto ERROR;
@@ -334,7 +334,7 @@ static PyObject* Pakfire_whatrequires(PakfireObject* self, PyObject* args) {
        Py_BEGIN_ALLOW_THREADS
 
        // Create a new list
-       r = pakfire_packagelist_create(&list, self->pakfire);
+       r = pakfire_packagelist_create(&list, pakfire_ctx);
        if (r) {
                Py_BLOCK_THREADS
                PyErr_SetFromErrno(PyExc_OSError);
@@ -376,7 +376,7 @@ static PyObject* Pakfire_search(PakfireObject* self, PyObject* args, PyObject* k
        if (name_only)
                flags |= PAKFIRE_SEARCH_NAME_ONLY;
 
-       r = pakfire_packagelist_create(&list, self->pakfire);
+       r = pakfire_packagelist_create(&list, pakfire_ctx);
        if (r) {
                PyErr_SetFromErrno(PyExc_OSError);
                goto ERROR;
index 4191beda8ebb1501ef2416588170fe79d919b004..00e35a0bd030592aee50528bcf3a5bb02e5a3dd8 100644 (file)
@@ -47,11 +47,14 @@ int cli_dump_package(struct pakfire_package* package, int flags) {
        return 0;
 }
 
-static int __cli_dump_package(struct pakfire* pakfire, struct pakfire_package* package, void* p) {
+static int __cli_dump_package(struct pakfire_ctx* ctx, struct pakfire_package* package, void* p) {
        int flags = *(int*)p;
 
+#if 0
        // Dump extra information when in build mode
+       // XXX We don't have access to Pakfire any more
        if (pakfire_has_flag(pakfire, PAKFIRE_FLAGS_BUILD))
+#endif
                flags |= PAKFIRE_PKG_DUMP_LONG;
 
        return cli_dump_package(package, flags);
index 58a016d758625aeb7c1965d112d16f6bb3226a07..6941070998b8f212c77b886bea12a8b2b4c3e321 100644 (file)
@@ -101,7 +101,7 @@ int cli_info(void* data, int argc, char* argv[]) {
                goto ERROR;
 
        // Allocate a new packagelist
-       r = pakfire_packagelist_create(&list, pakfire);
+       r = pakfire_packagelist_create(&list, cli_config->ctx);
        if (r)
                goto ERROR;
 
index 60589375570734910763cbfca11a05f8bdc917f8..a02025a1dc5de68bba17e505f34b13d585d64b5f 100644 (file)
@@ -76,7 +76,7 @@ int cli_provides(void* data, int argc, char* argv[]) {
                goto ERROR;
 
        // Allocate a new packagelist
-       r = pakfire_packagelist_create(&list, pakfire);
+       r = pakfire_packagelist_create(&list, cli_config->ctx);
        if (r)
                goto ERROR;
 
index 84b9580228318a599245f5deed45fb4d0c3a07a3..ceefea211e88bf35ba9347d88bb70d5b10ca26ea 100644 (file)
@@ -76,7 +76,7 @@ int cli_requires(void* data, int argc, char* argv[]) {
                goto ERROR;
 
        // Allocate a new packagelist
-       r = pakfire_packagelist_create(&list, pakfire);
+       r = pakfire_packagelist_create(&list, cli_config->ctx);
        if (r)
                goto ERROR;
 
index fa7fe810af5a0e24533c8174280942e353a727f9..fc40fd703b43bcf243b4fa763aa1f3c7c2d2bf3d 100644 (file)
@@ -76,7 +76,7 @@ int cli_search(void* data, int argc, char* argv[]) {
                goto ERROR;
 
        // Allocate a new packagelist
-       r = pakfire_packagelist_create(&list, pakfire);
+       r = pakfire_packagelist_create(&list, cli_config->ctx);
        if (r)
                goto ERROR;
 
index 7f11747bdace4d99d264a333053be3349a2b3e18..5b8fbc6bbb7afc819eff55031f4b1d733b06574b 100644 (file)
@@ -976,7 +976,7 @@ ERROR:
        return r;
 }
 
-static int pakfire_build_package_dump(struct pakfire* pakfire,
+static int pakfire_build_package_dump(struct pakfire_ctx* ctx,
                struct pakfire_package* pkg, void* p) {
        struct pakfire_build* build = p;
 
@@ -1025,7 +1025,7 @@ static int pakfire_build_packages(struct pakfire_build* build,
                goto ERROR;
 
        // Create a new packagelist
-       r = pakfire_packagelist_create(&build->packages, build->pakfire);
+       r = pakfire_packagelist_create(&build->packages, build->ctx);
        if (r)
                goto ERROR;
 
@@ -1952,7 +1952,7 @@ ERROR:
        return r;
 }
 
-static int pakfire_build_install_package(struct pakfire* pakfire,
+static int pakfire_build_install_package(struct pakfire_ctx* ctx,
                struct pakfire_package* pkg, void* p) {
        struct pakfire_transaction* transaction = (struct pakfire_transaction*)p;
 
@@ -2014,7 +2014,7 @@ static int pakfire_build_post_check(struct pakfire_build* build) {
        return 0;
 }
 
-static int pakfire_build_copy_package(struct pakfire* pakfire,
+static int pakfire_build_copy_package(struct pakfire_ctx* ctx,
                struct pakfire_package* pkg, void* p) {
        struct pakfire_archive* archive = NULL;
        char path[PATH_MAX];
index 95e058abc13953d9fd009e56ab3409df7a972b2d..194c1e4c9898ce32ecf5c2ce2a8734c4eeccf300 100644 (file)
 
 struct pakfire_packagelist;
 
+#include <pakfire/ctx.h>
 #include <pakfire/package.h>
-#include <pakfire/pakfire.h>
 
-int pakfire_packagelist_create(struct pakfire_packagelist** list, struct pakfire* pakfire);
+int pakfire_packagelist_create(struct pakfire_packagelist** list, struct pakfire_ctx* ctx);
 struct pakfire_packagelist* pakfire_packagelist_ref(struct pakfire_packagelist* list);
 struct pakfire_packagelist* pakfire_packagelist_unref(struct pakfire_packagelist* list);
 
@@ -36,7 +36,7 @@ struct pakfire_package* pakfire_packagelist_get(struct pakfire_packagelist* list
 int pakfire_packagelist_push(struct pakfire_packagelist* list, struct pakfire_package* pkg);
 
 typedef int (*pakfire_packagelist_walk_callback)
-       (struct pakfire* pakfire, struct pakfire_package* pkg, void* p);
+       (struct pakfire_ctx* ctx, struct pakfire_package* pkg, void* p);
 
 int pakfire_packagelist_walk(struct pakfire_packagelist* list,
        pakfire_packagelist_walk_callback callback, void* p);
@@ -45,7 +45,10 @@ int pakfire_packagelist_walk(struct pakfire_packagelist* list,
 
 #include <solv/queue.h>
 
-int pakfire_packagelist_import_solvables(struct pakfire_packagelist* list, Queue* q);
+#include <pakfire/pakfire.h>
+
+int pakfire_packagelist_import_solvables(struct pakfire_packagelist* list,
+       struct pakfire* pakfire, Queue* q);
 
 #endif
 
index 56528d7a1c48041abecdd913b13f9488557f5536..ac6a8c2d9c7f4e1df9f8fc1018d7bf5163fd2316 100644 (file)
@@ -1383,7 +1383,7 @@ PAKFIRE_EXPORT int pakfire_package_get_reverse_requires(struct pakfire_package*
        pool_whatmatchessolvable(pool, SOLVABLE_REQUIRES, pkg->id, &matches, 0);
 
        // Import the result to the package list
-       int r = pakfire_packagelist_import_solvables(list, &matches);
+       int r = pakfire_packagelist_import_solvables(list, pkg->pakfire, &matches);
        if (r)
                goto ERROR;
 
@@ -2177,7 +2177,7 @@ ERROR:
        return r;
 }
 
-static int __pakfire_package_add_build_packages(struct pakfire* pakfire,
+static int __pakfire_package_add_build_packages(struct pakfire_ctx* ctx,
                struct pakfire_package* pkg, void* p) {
        struct json_object* object = (struct json_object*)p;
        int r;
@@ -2186,14 +2186,14 @@ static int __pakfire_package_add_build_packages(struct pakfire* pakfire,
        const char* evr = pakfire_package_get_string(pkg, PAKFIRE_PKG_EVR);
 
        if (!name || !evr) {
-               ERROR(pakfire, "Could not fetch package information: %m\n");
+               CTX_ERROR(ctx, "Could not fetch package information: %m\n");
                return 1;
        }
 
        // Add package information to the list
-       r = pakfire_json_add_string(pakfire, object, name, evr);
+       r = pakfire_json_add_string(pkg->pakfire, object, name, evr);
        if (r) {
-               ERROR(pakfire, "Could not add package to packages list: %m\n");
+               CTX_ERROR(ctx, "Could not add package to packages list: %m\n");
                return r;
        }
 
@@ -2224,7 +2224,7 @@ static int pakfire_package_add_build_packages(struct pakfire_package* pkg,
        }
 
        // Create a new list
-       r = pakfire_packagelist_create(&packages, pkg->pakfire);
+       r = pakfire_packagelist_create(&packages, pkg->ctx);
        if (r)
                goto ERROR;
 
index 945e4ac636b4515da45b90d29c8a4b5a1132182a..f77b76df18e2edc209a0c6a65c78545722c2b82f 100644 (file)
@@ -23,6 +23,7 @@
 
 #include <solv/queue.h>
 
+#include <pakfire/ctx.h>
 #include <pakfire/logging.h>
 #include <pakfire/package.h>
 #include <pakfire/packagelist.h>
@@ -36,7 +37,7 @@ struct pakfire_packagelist_element {
 };
 
 struct pakfire_packagelist {
-       struct pakfire* pakfire;
+       struct pakfire_ctx* ctx;
        int nrefs;
 
        TAILQ_HEAD(entries, pakfire_packagelist_element) packages;
@@ -62,18 +63,19 @@ static void pakfire_packagelist_clear(struct pakfire_packagelist* list) {
 
 static void pakfire_packagelist_free(struct pakfire_packagelist* list) {
        pakfire_packagelist_clear(list);
-       pakfire_unref(list->pakfire);
+       if (list->ctx)
+               pakfire_ctx_unref(list->ctx);
        free(list);
 }
 
 PAKFIRE_EXPORT int pakfire_packagelist_create(
-               struct pakfire_packagelist** list, struct pakfire* pakfire) {
+               struct pakfire_packagelist** list, struct pakfire_ctx* ctx) {
        struct pakfire_packagelist* l = calloc(1, sizeof(*l));
        if (!l)
                return 1;
 
-       // Store a reference to Pakfire
-       l->pakfire = pakfire_ref(pakfire);
+       // Store a reference to the context
+       l->ctx = pakfire_ctx_ref(ctx);
 
        // Initialize the reference counter
        l->nrefs = 1;
@@ -131,7 +133,7 @@ PAKFIRE_EXPORT int pakfire_packagelist_push(struct pakfire_packagelist* list, st
        // Allocate a new element
        element = calloc(1, sizeof *element);
        if (!element) {
-               ERROR(list->pakfire, "Could not allocate a new packagelist element: %m\n");
+               CTX_ERROR(list->ctx, "Could not allocate a new packagelist element: %m\n");
                return 1;
        }
 
@@ -167,7 +169,7 @@ PAKFIRE_EXPORT int pakfire_packagelist_walk(struct pakfire_packagelist* list,
        // Call the callback once for every element on the list
        TAILQ_FOREACH(element, &list->packages, nodes) {
                // Call the callback
-               r = callback(list->pakfire, element->pkg, data);
+               r = callback(list->ctx, element->pkg, data);
                if (r)
                        break;
        }
@@ -175,13 +177,14 @@ PAKFIRE_EXPORT int pakfire_packagelist_walk(struct pakfire_packagelist* list,
        return r;
 }
 
-int pakfire_packagelist_import_solvables(struct pakfire_packagelist* list, Queue* q) {
+int pakfire_packagelist_import_solvables(struct pakfire_packagelist* list,
+               struct pakfire* pakfire, Queue* q) {
        struct pakfire_package* pkg = NULL;
        int r;
 
        // Walk through all elements on the queue
        for (int i = 0; i < q->count; i++) {
-               r = pakfire_package_create_from_solvable(&pkg, list->pakfire, q->elements[i]);
+               r = pakfire_package_create_from_solvable(&pkg, pakfire, q->elements[i]);
                if (r)
                        return r;
 
index 9bc2f18c88cf93e956f831d229c1fb51ae10293e..cc3d3b422fded8343b86d34746dcc311f3039d7f 100644 (file)
@@ -1435,7 +1435,7 @@ static int __pakfire_search(struct pakfire* pakfire, struct pakfire_packagelist*
        }
 
        // Import matches into the package list
-       r = pakfire_packagelist_import_solvables(list, &matches);
+       r = pakfire_packagelist_import_solvables(list, pakfire, &matches);
        if (r)
                goto ERROR;
 
@@ -1477,7 +1477,7 @@ static int pakfire_search_dep(struct pakfire* pakfire, Id type, const char* what
        pool_whatmatchesdep(pakfire->pool, type, dep, &matches, 0);
 
        // Add the result to the packagelist
-       r = pakfire_packagelist_import_solvables(list, &matches);
+       r = pakfire_packagelist_import_solvables(list, pakfire, &matches);
        if (r)
                goto ERROR;
 
@@ -1512,7 +1512,7 @@ PAKFIRE_EXPORT int pakfire_whatprovides(struct pakfire* pakfire, const char* wha
        return 0;
 }
 
-static int __pakfire_whatrequires(struct pakfire* pakfire, struct pakfire_package* pkg, void* data) {
+static int __pakfire_whatrequires(struct pakfire_ctx* ctx, struct pakfire_package* pkg, void* data) {
        struct pakfire_packagelist* list = (struct pakfire_packagelist*)data;
 
        return pakfire_package_get_reverse_requires(pkg, list);
@@ -1529,7 +1529,7 @@ PAKFIRE_EXPORT int pakfire_whatrequires(struct pakfire* pakfire, const char* wha
        };
 
        // Create a new package list
-       r = pakfire_packagelist_create(&packages, pakfire);
+       r = pakfire_packagelist_create(&packages, pakfire->ctx);
        if (r)
                goto ERROR;