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;
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;
}
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:"
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;
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(
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;
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);
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
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);
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;
#include <pakfire/archive.h>
#include <pakfire/config.h>
+#include <pakfire/ctx.h>
#include <pakfire/httpclient.h>
#include <pakfire/key.h>
#include <pakfire/mirrorlist.h>
#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);
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);
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;
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;
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;
}
// 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;
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;
// 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;
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;
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;
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;
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;
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
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,
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,
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)