From: Michael Tremer Date: Fri, 20 Oct 2023 12:20:57 +0000 (+0000) Subject: packagelist: Decouple for the pakfire object X-Git-Tag: 0.9.30~1415 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=460ce205fbe50e6e0bf94ee0bd18b959d19bd9cd;p=pakfire.git packagelist: Decouple for the pakfire object Signed-off-by: Michael Tremer --- diff --git a/src/_pakfire/package.c b/src/_pakfire/package.c index 8b5aa0942..a0ca9702e 100644 --- a/src/_pakfire/package.c +++ b/src/_pakfire/package.c @@ -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; } diff --git a/src/_pakfire/pakfire.c b/src/_pakfire/pakfire.c index 0ada88b21..d0728be15 100644 --- a/src/_pakfire/pakfire.c +++ b/src/_pakfire/pakfire.c @@ -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; diff --git a/src/cli/lib/dump.c b/src/cli/lib/dump.c index 4191beda8..00e35a0bd 100644 --- a/src/cli/lib/dump.c +++ b/src/cli/lib/dump.c @@ -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); diff --git a/src/cli/lib/info.c b/src/cli/lib/info.c index 58a016d75..694107099 100644 --- a/src/cli/lib/info.c +++ b/src/cli/lib/info.c @@ -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; diff --git a/src/cli/lib/provides.c b/src/cli/lib/provides.c index 605893755..a02025a1d 100644 --- a/src/cli/lib/provides.c +++ b/src/cli/lib/provides.c @@ -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; diff --git a/src/cli/lib/requires.c b/src/cli/lib/requires.c index 84b958022..ceefea211 100644 --- a/src/cli/lib/requires.c +++ b/src/cli/lib/requires.c @@ -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; diff --git a/src/cli/lib/search.c b/src/cli/lib/search.c index fa7fe810a..fc40fd703 100644 --- a/src/cli/lib/search.c +++ b/src/cli/lib/search.c @@ -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; diff --git a/src/libpakfire/build.c b/src/libpakfire/build.c index 7f11747bd..5b8fbc6bb 100644 --- a/src/libpakfire/build.c +++ b/src/libpakfire/build.c @@ -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]; diff --git a/src/libpakfire/include/pakfire/packagelist.h b/src/libpakfire/include/pakfire/packagelist.h index 95e058abc..194c1e4c9 100644 --- a/src/libpakfire/include/pakfire/packagelist.h +++ b/src/libpakfire/include/pakfire/packagelist.h @@ -23,10 +23,10 @@ struct pakfire_packagelist; +#include #include -#include -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 -int pakfire_packagelist_import_solvables(struct pakfire_packagelist* list, Queue* q); +#include + +int pakfire_packagelist_import_solvables(struct pakfire_packagelist* list, + struct pakfire* pakfire, Queue* q); #endif diff --git a/src/libpakfire/package.c b/src/libpakfire/package.c index 56528d7a1..ac6a8c2d9 100644 --- a/src/libpakfire/package.c +++ b/src/libpakfire/package.c @@ -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; diff --git a/src/libpakfire/packagelist.c b/src/libpakfire/packagelist.c index 945e4ac63..f77b76df1 100644 --- a/src/libpakfire/packagelist.c +++ b/src/libpakfire/packagelist.c @@ -23,6 +23,7 @@ #include +#include #include #include #include @@ -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; diff --git a/src/libpakfire/pakfire.c b/src/libpakfire/pakfire.c index 9bc2f18c8..cc3d3b422 100644 --- a/src/libpakfire/pakfire.c +++ b/src/libpakfire/pakfire.c @@ -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;