#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) {
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;
ERROR:
if (list)
pakfire_packagelist_unref(list);
- if (pakfire)
- pakfire_unref(pakfire);
return ret;
}
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;
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);
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;
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);
goto ERROR;
// Allocate a new packagelist
- r = pakfire_packagelist_create(&list, pakfire);
+ r = pakfire_packagelist_create(&list, cli_config->ctx);
if (r)
goto ERROR;
goto ERROR;
// Allocate a new packagelist
- r = pakfire_packagelist_create(&list, pakfire);
+ r = pakfire_packagelist_create(&list, cli_config->ctx);
if (r)
goto ERROR;
goto ERROR;
// Allocate a new packagelist
- r = pakfire_packagelist_create(&list, pakfire);
+ r = pakfire_packagelist_create(&list, cli_config->ctx);
if (r)
goto ERROR;
goto ERROR;
// Allocate a new packagelist
- r = pakfire_packagelist_create(&list, pakfire);
+ r = pakfire_packagelist_create(&list, cli_config->ctx);
if (r)
goto 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;
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;
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;
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];
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);
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);
#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
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;
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;
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;
}
}
// Create a new list
- r = pakfire_packagelist_create(&packages, pkg->pakfire);
+ r = pakfire_packagelist_create(&packages, pkg->ctx);
if (r)
goto ERROR;
#include <solv/queue.h>
+#include <pakfire/ctx.h>
#include <pakfire/logging.h>
#include <pakfire/package.h>
#include <pakfire/packagelist.h>
};
struct pakfire_packagelist {
- struct pakfire* pakfire;
+ struct pakfire_ctx* ctx;
int nrefs;
TAILQ_HEAD(entries, pakfire_packagelist_element) packages;
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;
// 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;
}
// 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;
}
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;
}
// 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;
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;
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);
};
// Create a new package list
- r = pakfire_packagelist_create(&packages, pakfire);
+ r = pakfire_packagelist_create(&packages, pakfire->ctx);
if (r)
goto ERROR;