From: Michael Tremer Date: Sun, 29 Jun 2025 14:16:32 +0000 (+0000) Subject: repo: Directly pass the context X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=5ddce6145868a4a23ad8e68994dd4cc4ee18ea5f;p=pakfire.git repo: Directly pass the context Signed-off-by: Michael Tremer --- diff --git a/src/pakfire/build.c b/src/pakfire/build.c index a4d134ab..28c5d9a6 100644 --- a/src/pakfire/build.c +++ b/src/pakfire/build.c @@ -1998,7 +1998,7 @@ static int pakfire_build_setup_repo(pakfire_build* build) { int r; // Create a new repository - r = pakfire_repo_create(&build->repo, build->root, PAKFIRE_REPO_RESULT); + r = pakfire_repo_create(&build->repo, build->ctx, build->root, PAKFIRE_REPO_RESULT); if (r) { ERROR(build->ctx, "Could not create repository %s: %m", PAKFIRE_REPO_RESULT); return r; diff --git a/src/pakfire/package.c b/src/pakfire/package.c index 93e4c587..0568b635 100644 --- a/src/pakfire/package.c +++ b/src/pakfire/package.c @@ -1802,7 +1802,7 @@ pakfire_repo* pakfire_package_get_repo(pakfire_package* pkg) { if (!pkg->repo) { Solvable* s = get_solvable(pkg); - r = pakfire_repo_open(&pkg->repo, pkg->root, s->repo); + r = pakfire_repo_open(&pkg->repo, pkg->ctx, pkg->root, s->repo); if (r < 0) return NULL; } diff --git a/src/pakfire/repo.c b/src/pakfire/repo.c index a310036b..21bcbc93 100644 --- a/src/pakfire/repo.c +++ b/src/pakfire/repo.c @@ -341,9 +341,14 @@ ERROR: return r; } +typedef struct pakfire_repo_import_state { + pakfire_ctx* ctx; + pakfire_root* root; +} pakfire_repo_import_state; + static int __pakfire_repo_import(pakfire_config* config, const char* section, void* data) { + const pakfire_repo_import_state* state = data; pakfire_repo* self = NULL; - pakfire_root* root = data; int r; // Ignore if the section does not start with "repo:" @@ -358,7 +363,7 @@ static int __pakfire_repo_import(pakfire_config* config, const char* section, vo return 0; // Create a new repository - r = pakfire_repo_create(&self, root, name); + r = pakfire_repo_create(&self, state->ctx, state->root, name); if (r < 0) goto ERROR; @@ -430,15 +435,15 @@ ERROR: return r; } -int pakfire_repo_import(pakfire_root* root, pakfire_config* config) { +int pakfire_repo_import(pakfire_ctx* ctx, pakfire_root* root, pakfire_config* config) { + pakfire_repo_import_state state = { + .ctx = ctx, + .root = root, + }; int r; // Import all repositories from the configuration - r = pakfire_config_walk_sections(config, __pakfire_repo_import, root); - if (r) - return r; - - return 0; + return pakfire_config_walk_sections(config, __pakfire_repo_import, &state); } static int pakfire_repo_to_packagelist( @@ -1445,7 +1450,8 @@ static int pakfire_repo_setup_appdata(pakfire_repo* self) { return 0; } -int pakfire_repo_create(pakfire_repo** repo, pakfire_root* root, const char* name) { +int pakfire_repo_create(pakfire_repo** repo, + pakfire_ctx* ctx, pakfire_root* root, const char* name) { pakfire_repo* self = NULL; int r; @@ -1455,7 +1461,7 @@ int pakfire_repo_create(pakfire_repo** repo, pakfire_root* root, const char* nam return -errno; // Store a reference to the context - self->ctx = pakfire_root_get_ctx(root); + self->ctx = pakfire_ctx_ref(ctx); // Store a reference to the root self->root = pakfire_root_ref(root); @@ -1505,7 +1511,7 @@ ERROR: return r; } -int pakfire_repo_open(pakfire_repo** repo, pakfire_root* root, Repo* _repo) { +int pakfire_repo_open(pakfire_repo** repo, pakfire_ctx* ctx, pakfire_root* root, Repo* _repo) { pakfire_repo* self = NULL; // Allocate some memory @@ -1514,7 +1520,7 @@ int pakfire_repo_open(pakfire_repo** repo, pakfire_root* root, Repo* _repo) { return -errno; // Store a reference to the context - self->ctx = pakfire_root_get_ctx(root); + self->ctx = pakfire_ctx_ref(ctx); // Store a reference to the root self->root = pakfire_root_ref(root); @@ -2589,7 +2595,7 @@ int pakfire_repo_compose(pakfire_ctx* ctx, pakfire_root* root, goto ERROR; // Create a new temporary repository at path - r = pakfire_repo_create(&repo, root, "tmp"); + r = pakfire_repo_create(&repo, ctx, root, "tmp"); if (r) { ERROR(ctx, "Could not create a temporary repository: %m\n"); goto ERROR; diff --git a/src/pakfire/repo.h b/src/pakfire/repo.h index c7e66ceb..0d901cde 100644 --- a/src/pakfire/repo.h +++ b/src/pakfire/repo.h @@ -31,6 +31,7 @@ typedef struct pakfire_repo pakfire_repo; #include #include +#include #include #include #include @@ -39,8 +40,10 @@ typedef struct pakfire_repo pakfire_repo; #include #include -int pakfire_repo_create(pakfire_repo** repo, pakfire_root* root, const char* name); -int pakfire_repo_open(pakfire_repo** repo, pakfire_root* root, Repo* _repo); +int pakfire_repo_create(pakfire_repo** repo, + pakfire_ctx* ctx, pakfire_root* root, const char* name); +int pakfire_repo_open(pakfire_repo** repo, + pakfire_ctx* ctx, pakfire_root* root, Repo* _repo); pakfire_repo* pakfire_repo_ref(pakfire_repo* repo); pakfire_repo* pakfire_repo_unref(pakfire_repo* repo); @@ -121,7 +124,7 @@ int pakfire_repo_is_local(pakfire_repo* repo); char* pakfire_repo_url_replace(pakfire_repo* repo, const char* url); -int pakfire_repo_import(pakfire_root* root, pakfire_config* config); +int pakfire_repo_import(pakfire_ctx* ctx, pakfire_root* root, pakfire_config* config); const char* pakfire_repo_get_path(pakfire_repo* repo); void pakfire_repo_has_changed(pakfire_repo* repo); diff --git a/src/pakfire/root.c b/src/pakfire/root.c index 9a5a239e..cf5b4556 100644 --- a/src/pakfire/root.c +++ b/src/pakfire/root.c @@ -425,7 +425,7 @@ static int pakfire_root_setup_default_repos(pakfire_root* self) { int r; // Create a dummy repository - r = pakfire_repo_create(&dummy, self, PAKFIRE_REPO_DUMMY); + r = pakfire_repo_create(&dummy, self->ctx, self, PAKFIRE_REPO_DUMMY); if (r < 0) goto ERROR; @@ -433,7 +433,7 @@ static int pakfire_root_setup_default_repos(pakfire_root* self) { pakfire_repo_set_enabled(dummy, 0); // Create the system repository - r = pakfire_repo_create(&system, self, PAKFIRE_REPO_SYSTEM); + r = pakfire_repo_create(&system, self->ctx, self, PAKFIRE_REPO_SYSTEM); if (r < 0) goto ERROR; @@ -441,7 +441,7 @@ static int pakfire_root_setup_default_repos(pakfire_root* self) { pool_set_installed(self->pool, pakfire_repo_get_repo(system)); // Create the command line repo - r = pakfire_repo_create(&commandline, self, PAKFIRE_REPO_COMMANDLINE); + r = pakfire_repo_create(&commandline, self->ctx, self, PAKFIRE_REPO_COMMANDLINE); if (r < 0) goto ERROR; @@ -667,7 +667,7 @@ static int pakfire_root_setup_local_repo(pakfire_root* self) { } // Create a new repository - r = pakfire_repo_create(&local, self, PAKFIRE_REPO_LOCAL); + r = pakfire_repo_create(&local, self->ctx, self, PAKFIRE_REPO_LOCAL); if (r < 0) { ERROR(self->ctx, "Could not create local repository: %s\n", strerror(-r)); goto ERROR; @@ -1104,7 +1104,7 @@ int pakfire_root_create(pakfire_root** root, pakfire_ctx* ctx, goto ERROR; // Create repositories - r = pakfire_repo_import(self, self->config); + r = pakfire_repo_import(self->ctx, self, self->config); if (r < 0) goto ERROR; @@ -1272,7 +1272,7 @@ int pakfire_root_repo_walk(pakfire_root* self, // Run func for every repository FOR_REPOS(i, solv_repo) { - r = pakfire_repo_open(&repo, self, solv_repo); + r = pakfire_repo_open(&repo, self->ctx, self, solv_repo); if (r < 0) return r; @@ -1380,7 +1380,7 @@ pakfire_repolist* pakfire_root_get_repos(pakfire_root* self) { continue; // Create repository - r = pakfire_repo_open(&repo, self, solv_repo); + r = pakfire_repo_open(&repo, self->ctx, self, solv_repo); if (r < 0) goto ERROR; @@ -1413,7 +1413,7 @@ pakfire_repo* pakfire_root_get_repo(pakfire_root* self, const char* name) { FOR_REPOS(i, solv_repo) { if (strcmp(solv_repo->name, name) == 0) { - r = pakfire_repo_open(&repo, self, solv_repo); + r = pakfire_repo_open(&repo, self->ctx, self, solv_repo); if (r < 0) return NULL; @@ -1433,7 +1433,7 @@ pakfire_repo* pakfire_root_get_installed_repo(pakfire_root* self) { return NULL; // Open the repository - r = pakfire_repo_open(&repo, self, self->pool->installed); + r = pakfire_repo_open(&repo, self->ctx, self, self->pool->installed); if (r < 0) return NULL; diff --git a/src/python/repo.c b/src/python/repo.c index bdae582d..96b45273 100644 --- a/src/python/repo.c +++ b/src/python/repo.c @@ -65,7 +65,7 @@ static int Repo_init(RepoObject* self, PyObject* args, PyObject* kwds) { return -1; // Create a new repository - int r = pakfire_repo_create(&self->repo, root->root, name); + int r = pakfire_repo_create(&self->repo, root->ctx->ctx, root->root, name); if (r) { PyErr_SetFromErrno(PyExc_OSError); return -1; diff --git a/tests/libpakfire/archive.c b/tests/libpakfire/archive.c index 8a639567..ee9209fd 100644 --- a/tests/libpakfire/archive.c +++ b/tests/libpakfire/archive.c @@ -224,7 +224,7 @@ static int test_import(const struct test* t) { ASSERT(archive); // Create a new repository - ASSERT_SUCCESS(pakfire_repo_create(&repo, t->root, "@tmp")); + ASSERT_SUCCESS(pakfire_repo_create(&repo, t->ctx, t->root, "@tmp")); ASSERT(repo); // Add the package to the repository diff --git a/tests/libpakfire/makefile.c b/tests/libpakfire/makefile.c index b764e044..3ce6274f 100644 --- a/tests/libpakfire/makefile.c +++ b/tests/libpakfire/makefile.c @@ -118,7 +118,7 @@ static int test_packages(const struct test* t) { char* s = NULL; int r = EXIT_FAILURE; - ASSERT_SUCCESS(pakfire_repo_create(&repo, t->root, "test")); + ASSERT_SUCCESS(pakfire_repo_create(&repo, t->ctx, t->root, "test")); ASSERT(repo); ASSERT_SUCCESS(pakfire_parser_create(&parser, t->ctx, t->root, NULL, NULL, diff --git a/tests/libpakfire/packager.c b/tests/libpakfire/packager.c index 5ccadde4..9f7b47d0 100644 --- a/tests/libpakfire/packager.c +++ b/tests/libpakfire/packager.c @@ -33,7 +33,7 @@ static int test_create(const struct test* t) { pakfire_repo* repo = NULL; int r = EXIT_FAILURE; - ASSERT_SUCCESS(pakfire_repo_create(&repo, t->root, "test")); + ASSERT_SUCCESS(pakfire_repo_create(&repo, t->ctx, t->root, "test")); ASSERT(repo); ASSERT_SUCCESS(pakfire_package_create(&pkg, t->ctx, t->root, repo, diff --git a/tests/libpakfire/repo.c b/tests/libpakfire/repo.c index 241f3421..4184307d 100644 --- a/tests/libpakfire/repo.c +++ b/tests/libpakfire/repo.c @@ -34,7 +34,7 @@ static int test_scan(const struct test* t) { pakfire_string_format(baseurl, "file://%s/data", TEST_SRC_PATH); - ASSERT_SUCCESS(pakfire_repo_create(&repo, t->root, "test")); + ASSERT_SUCCESS(pakfire_repo_create(&repo, t->ctx, t->root, "test")); ASSERT(repo); // Set the base URL (where to scan for files)