]> git.ipfire.org Git - people/ms/pakfire.git/commitdiff
repo: Directly pass the context
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 29 Jun 2025 14:16:32 +0000 (14:16 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 29 Jun 2025 14:16:32 +0000 (14:16 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/pakfire/build.c
src/pakfire/package.c
src/pakfire/repo.c
src/pakfire/repo.h
src/pakfire/root.c
src/python/repo.c
tests/libpakfire/archive.c
tests/libpakfire/makefile.c
tests/libpakfire/packager.c
tests/libpakfire/repo.c

index a4d134abc929e488dcd75060ae504c78557fd7fd..28c5d9a6b00bd3887985b972d0882a04ec05b93d 100644 (file)
@@ -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;
index 93e4c587914b23bd0b2c0d4374725091ef3dbaef..0568b635e733eeb90b981d241fb8ca47f8d727ee 100644 (file)
@@ -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;
        }
index a310036bd169da27aa0e8c02d48cb042df79ec11..21bcbc93490652865da01d14ed53568f09f6fbb0 100644 (file)
@@ -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;
index c7e66ceb4f9533a32bb0dfdea0ba21a79a44f927..0d901cde72f27c2a69ab333e52c0f1e9ca9dd48f 100644 (file)
@@ -31,6 +31,7 @@ typedef struct pakfire_repo pakfire_repo;
 
 #include <pakfire/archive.h>
 #include <pakfire/config.h>
+#include <pakfire/ctx.h>
 #include <pakfire/httpclient.h>
 #include <pakfire/key.h>
 #include <pakfire/mirrorlist.h>
@@ -39,8 +40,10 @@ typedef struct pakfire_repo pakfire_repo;
 #include <pakfire/root.h>
 #include <pakfire/xfer.h>
 
-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);
index 9a5a239e19d2ccf12d6fd281756b770bc23086cd..cf5b4556ced5e5e9fc5f05e8d19212670d43ef1e 100644 (file)
@@ -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;
 
index bdae582db47a77982d15ac34356a9d00b2f50a9b..96b4527312ee8168c17496f13085115de02c11bc 100644 (file)
@@ -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;
index 8a639567581ec48b8963eaece66a0421c6260bd8..ee9209fda7966a0b71ad4c95cd176eb4ad934ae4 100644 (file)
@@ -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
index b764e044c95160d3989c5c3d05a0d34822ab4f24..3ce6274fb652d7b1ca3e164af5ffcb2bb1df2a63 100644 (file)
@@ -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,
index 5ccadde4dd093246e0820aff5c2ac725f930e720..9f7b47d0a5cfee1743debff5c26c1fd14aaed2bc 100644 (file)
@@ -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,
index 241f34216c1a336dc9a7632ee76e5a5ccdd1d094..4184307d98bb632ff58bbd6dd1b1935721d809f5 100644 (file)
@@ -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)