return PyUnicode_FromString(path);
}
-static PyObject* PyList_FromRelationList(PakfireRelationList relationlist) {
+static PyObject* PyList_FromRelationList(char** deps) {
PyObject* list = PyList_New(0);
if (list == NULL)
return NULL;
- const size_t count = pakfire_relationlist_size(relationlist);
+ // Empty list?
+ if (!deps)
+ return list;
- for (unsigned int i = 0; i < count; i++) {
- PakfireRelation relation = pakfire_relationlist_get(relationlist, i);
- PyObject* relation_obj = new_relation(&RelationType, relation);
-
- pakfire_relation_unref(relation);
- if (relation_obj == NULL)
- goto fail;
-
- int ret = PyList_Append(list, relation_obj);
- Py_DECREF(relation_obj);
+ for (char** dep = deps; *dep; dep++) {
+ PyObject* obj = PyUnicode_FromString(*dep);
+ if (!obj)
+ break;
- if (ret == -1)
- goto fail;
+ PyList_Append(list, obj);
+ Py_DECREF(obj);
}
return list;
-
-fail:
- Py_DECREF(list);
- return NULL;
}
-static PakfireRelationList PyList_AsRelationList(Pakfire pakfire, PyObject* value) {
- if (!PySequence_Check(value)) {
- PyErr_SetString(PyExc_AttributeError, "Expected a sequence.");
- return NULL;
- }
-
- const int length = PySequence_Length(value);
- PakfireRelationList relationlist;
-
- int r = pakfire_relationlist_create(&relationlist, pakfire);
- if (r)
- return NULL;
-
- for (int i = 0; i < length; i++) {
- PyObject* item = PySequence_GetItem(value, i);
-
- if (!PyObject_TypeCheck(item, &RelationType)) {
- pakfire_relationlist_unref(relationlist);
- Py_DECREF(item);
-
- PyErr_SetString(PyExc_AttributeError, "Expected a Relation object");
- return NULL;
- }
+static PyObject* Package_get_provides(PackageObject* self) {
+ char** deps = pakfire_package_get_provides(self->package);
- RelationObject* relation = (RelationObject *)item;
- pakfire_relationlist_add(relationlist, relation->relation);
+ PyObject* list = PyList_FromRelationList(deps);
- Py_DECREF(item);
+ if (deps) {
+ for (char** dep = deps; *dep; dep++)
+ free(*dep);
+ free(deps);
}
- return relationlist;
-}
-
-static PyObject* Package_get_provides(PackageObject* self) {
- PakfireRelationList relationlist = pakfire_package_get_provides(self->package);
-
- PyObject* list = PyList_FromRelationList(relationlist);
- pakfire_relationlist_unref(relationlist);
-
return list;
}
-static int Package_set_provides(PackageObject* self, PyObject* value) {
- Pakfire pakfire = pakfire_package_get_pakfire(self->package);
-
- PakfireRelationList relationlist = PyList_AsRelationList(pakfire, value);
- pakfire_unref(pakfire);
- if (!relationlist)
- return -1;
-
- pakfire_package_set_provides(self->package, relationlist);
- pakfire_relationlist_unref(relationlist);
-
- return 0;
-}
-
-static PyObject* Package_add_provides(PackageObject* self, PyObject* args) {
- RelationObject* relation = NULL;
-
- if (!PyArg_ParseTuple(args, "O!", &RelationType, &relation))
- return NULL;
-
- pakfire_package_add_provides(self->package, relation->relation);
-
- Py_RETURN_NONE;
-}
-
static PyObject* Package_get_requires(PackageObject* self) {
- PakfireRelationList relationlist = pakfire_package_get_requires(self->package);
-
- PyObject* list = PyList_FromRelationList(relationlist);
- pakfire_relationlist_unref(relationlist);
-
- return list;
-}
-
-static int Package_set_requires(PackageObject* self, PyObject* value) {
- Pakfire pakfire = pakfire_package_get_pakfire(self->package);
-
- PakfireRelationList relationlist = PyList_AsRelationList(pakfire, value);
- pakfire_unref(pakfire);
- if (!relationlist)
- return -1;
-
- pakfire_package_set_requires(self->package, relationlist);
- pakfire_relationlist_unref(relationlist);
-
- return 0;
-}
-
-static PyObject* Package_add_requires(PackageObject* self, PyObject* args) {
- RelationObject* relation = NULL;
+ char** deps = pakfire_package_get_requires(self->package);
- if (!PyArg_ParseTuple(args, "O!", &RelationType, &relation))
- return NULL;
-
- pakfire_package_add_requires(self->package, relation->relation);
-
- Py_RETURN_NONE;
-}
-
-static PyObject* Package_get_obsoletes(PackageObject* self) {
- PakfireRelationList relationlist = pakfire_package_get_obsoletes(self->package);
+ PyObject* list = PyList_FromRelationList(deps);
- PyObject* list = PyList_FromRelationList(relationlist);
- pakfire_relationlist_unref(relationlist);
+ if (deps) {
+ for (char** dep = deps; *dep; dep++)
+ free(*dep);
+ free(deps);
+ }
return list;
}
-static int Package_set_obsoletes(PackageObject* self, PyObject* value) {
- Pakfire pakfire = pakfire_package_get_pakfire(self->package);
-
- PakfireRelationList relationlist = PyList_AsRelationList(pakfire, value);
- pakfire_unref(pakfire);
- if (!relationlist)
- return -1;
-
- pakfire_package_set_obsoletes(self->package, relationlist);
- pakfire_relationlist_unref(relationlist);
-
- return 0;
-}
-
-static PyObject* Package_add_obsoletes(PackageObject* self, PyObject* args) {
- RelationObject* relation = NULL;
-
- if (!PyArg_ParseTuple(args, "O!", &RelationType, &relation))
- return NULL;
-
- pakfire_package_add_obsoletes(self->package, relation->relation);
+static PyObject* Package_get_obsoletes(PackageObject* self) {
+ char** deps = pakfire_package_get_obsoletes(self->package);
- Py_RETURN_NONE;
-}
+ PyObject* list = PyList_FromRelationList(deps);
-static PyObject* Package_get_conflicts(PackageObject* self) {
- PakfireRelationList relationlist = pakfire_package_get_conflicts(self->package);
-
- PyObject* list = PyList_FromRelationList(relationlist);
- pakfire_relationlist_unref(relationlist);
+ if (deps) {
+ for (char** dep = deps; *dep; dep++)
+ free(*dep);
+ free(deps);
+ }
return list;
}
-static int Package_set_conflicts(PackageObject* self, PyObject* value) {
- Pakfire pakfire = pakfire_package_get_pakfire(self->package);
-
- PakfireRelationList relationlist = PyList_AsRelationList(pakfire, value);
- pakfire_unref(pakfire);
- if (!relationlist)
- return -1;
-
- pakfire_package_set_conflicts(self->package, relationlist);
- pakfire_relationlist_unref(relationlist);
-
- return 0;
-}
-
-static PyObject* Package_add_conflicts(PackageObject* self, PyObject* args) {
- RelationObject* relation = NULL;
-
- if (!PyArg_ParseTuple(args, "O!", &RelationType, &relation))
- return NULL;
-
- pakfire_package_add_conflicts(self->package, relation->relation);
-
- Py_RETURN_NONE;
-}
+static PyObject* Package_get_conflicts(PackageObject* self) {
+ char** deps = pakfire_package_get_conflicts(self->package);
-static PyObject* Package_get_recommends(PackageObject* self) {
- PakfireRelationList relationlist = pakfire_package_get_recommends(self->package);
+ PyObject* list = PyList_FromRelationList(deps);
- PyObject* list = PyList_FromRelationList(relationlist);
- pakfire_relationlist_unref(relationlist);
+ if (deps) {
+ for (char** dep = deps; *dep; dep++)
+ free(*dep);
+ free(deps);
+ }
return list;
}
-static int Package_set_recommends(PackageObject* self, PyObject* value) {
- Pakfire pakfire = pakfire_package_get_pakfire(self->package);
-
- PakfireRelationList relationlist = PyList_AsRelationList(pakfire, value);
- pakfire_unref(pakfire);
- if (!relationlist)
- return -1;
-
- pakfire_package_set_recommends(self->package, relationlist);
- pakfire_relationlist_unref(relationlist);
-
- return 0;
-}
-
-static PyObject* Package_add_recommends(PackageObject* self, PyObject* args) {
- RelationObject* relation = NULL;
-
- if (!PyArg_ParseTuple(args, "O!", &RelationType, &relation))
- return NULL;
-
- pakfire_package_add_recommends(self->package, relation->relation);
-
- Py_RETURN_NONE;
-}
+static PyObject* Package_get_recommends(PackageObject* self) {
+ char** deps = pakfire_package_get_recommends(self->package);
-static PyObject* Package_get_suggests(PackageObject* self) {
- PakfireRelationList relationlist = pakfire_package_get_suggests(self->package);
+ PyObject* list = PyList_FromRelationList(deps);
- PyObject* list = PyList_FromRelationList(relationlist);
- pakfire_relationlist_unref(relationlist);
+ if (deps) {
+ for (char** dep = deps; *dep; dep++)
+ free(*dep);
+ free(deps);
+ }
return list;
}
-static int Package_set_suggests(PackageObject* self, PyObject* value) {
- Pakfire pakfire = pakfire_package_get_pakfire(self->package);
-
- PakfireRelationList relationlist = PyList_AsRelationList(pakfire, value);
- pakfire_unref(pakfire);
- if (!relationlist)
- return -1;
-
- pakfire_package_set_suggests(self->package, relationlist);
- pakfire_relationlist_unref(relationlist);
-
- return 0;
-}
-
-static PyObject* Package_add_suggests(PackageObject* self, PyObject* args) {
- RelationObject* relation = NULL;
+static PyObject* Package_get_suggests(PackageObject* self) {
+ char** deps = pakfire_package_get_suggests(self->package);
- if (!PyArg_ParseTuple(args, "O!", &RelationType, &relation))
- return NULL;
+ PyObject* list = PyList_FromRelationList(deps);
- pakfire_package_add_suggests(self->package, relation->relation);
+ if (deps) {
+ for (char** dep = deps; *dep; dep++)
+ free(*dep);
+ free(deps);
+ }
- Py_RETURN_NONE;
+ return list;
}
static PyObject* Package_get_filelist(PackageObject* self, PyObject* args) {
}
static struct PyMethodDef Package_methods[] = {
- {
- "add_provides",
- (PyCFunction)Package_add_provides,
- METH_VARARGS,
- NULL
- },
- {
- "add_requires",
- (PyCFunction)Package_add_requires,
- METH_VARARGS,
- NULL
- },
- {
- "add_conflicts",
- (PyCFunction)Package_add_conflicts,
- METH_VARARGS,
- NULL
- },
- {
- "add_obsoletes",
- (PyCFunction)Package_add_obsoletes,
- METH_VARARGS,
- NULL
- },
- {
- "add_recommends",
- (PyCFunction)Package_add_recommends,
- METH_VARARGS,
- NULL
- },
- {
- "add_suggests",
- (PyCFunction)Package_add_suggests,
- METH_VARARGS,
- NULL
- },
{
"dump",
(PyCFunction)Package_dump,
{
"provides",
(getter)Package_get_provides,
- (setter)Package_set_provides,
+ NULL,
NULL,
NULL
},
{
"requires",
(getter)Package_get_requires,
- (setter)Package_set_requires,
+ NULL,
NULL,
NULL
},
{
"obsoletes",
(getter)Package_get_obsoletes,
- (setter)Package_set_obsoletes,
+ NULL,
NULL,
NULL
},
{
"conflicts",
(getter)Package_get_conflicts,
- (setter)Package_set_conflicts,
+ NULL,
NULL,
NULL
},
{
"recommends",
(getter)Package_get_recommends,
- (setter)Package_set_recommends,
+ NULL,
NULL,
NULL
},
{
"suggests",
(getter)Package_get_suggests,
- (setter)Package_set_suggests,
+ NULL,
NULL,
NULL
},
}
// Relations
- PakfireRelationList l;
const struct __relation {
const char* type;
- void (*func)(PakfirePackage, PakfireRelationList);
+ void (*func)(PakfirePackage, const char* dep);
} relations[] = {
- { "provides", pakfire_package_set_provides },
- { "prerequires", pakfire_package_set_prerequires },
- { "requires", pakfire_package_set_requires },
- { "conflicts", pakfire_package_set_conflicts },
- { "obsoletes", pakfire_package_set_obsoletes },
- { "recommends", pakfire_package_set_recommends },
- { "suggests", pakfire_package_set_suggests },
- { "supplements", pakfire_package_set_supplements },
- { "enhances", pakfire_package_set_enhances },
+ { "provides", pakfire_package_add_provides },
+ { "prerequires", pakfire_package_add_prerequires },
+ { "requires", pakfire_package_add_requires },
+ { "conflicts", pakfire_package_add_conflicts },
+ { "obsoletes", pakfire_package_add_obsoletes },
+ { "recommends", pakfire_package_add_recommends },
+ { "suggests", pakfire_package_add_suggests },
+ { "supplements", pakfire_package_add_supplements },
+ { "enhances", pakfire_package_add_enhances },
{ NULL, NULL },
};
if (!relations)
continue;
- // Parse all relations
- int r = pakfire_relationlist_create_from_string(&l, archive->pakfire, relations);
- if (r)
- goto ERROR;
+ char* p = relations;
+ while (*p) {
+ char* e = strchr(p, '\n');
- free(relations);
+ // Terminate the string
+ if (e)
+ *e = '\0';
- // Assign to package
- relation->func(pkg, l);
+ // Add the dependency
+ relation->func(pkg, p);
- pakfire_relationlist_unref(l);
+ // End loop when we reached the end
+ if (!e)
+ break;
+
+ // Or continue at the next line
+ p = e + 1;
+ }
}
// Import filelist
const struct __relation {
const char* type;
- PakfireRelationList (*func)(PakfirePackage);
+ char** (*func)(PakfirePackage);
} relations[] = {
{ "provides", pakfire_package_get_provides },
{ "prerequires", pakfire_package_get_prerequires },
};
for (const struct __relation* relation = relations; relation->type; relation++) {
- PakfireRelationList list = relation->func(pkg);
+ char** list = relation->func(pkg);
if (!list)
continue;
- for (unsigned int i = 0; i < pakfire_relationlist_size(list); i++) {
- PakfireRelation rel = pakfire_relationlist_get(list, i);
- if (!rel)
- goto END;
-
- char* dependency = pakfire_relation_str(rel);
- if (!dependency) {
- pakfire_relation_unref(rel);
- r = 1;
- goto END;
- }
-
+ for (char** dep = list; *dep; dep++) {
// Bind package ID
r = sqlite3_bind_int64(stmt, 1, id);
if (r) {
ERROR(db->pakfire, "Could not bind id: %s\n",
sqlite3_errmsg(db->handle));
- pakfire_relation_unref(rel);
goto END;
}
if (r) {
ERROR(db->pakfire, "Could not bind type: %s\n",
sqlite3_errmsg(db->handle));
- pakfire_relation_unref(rel);
goto END;
}
// Bind dependency
- r = sqlite3_bind_text(stmt, 3, dependency, -1, NULL);
+ r = sqlite3_bind_text(stmt, 3, *dep, -1, NULL);
if (r) {
ERROR(db->pakfire, "Could not bind dependency: %s\n",
sqlite3_errmsg(db->handle));
- pakfire_relation_unref(rel);
goto END;
}
r = sqlite3_step(stmt);
} while (r == SQLITE_BUSY);
- pakfire_relation_unref(rel);
- free(dependency);
+ free(*dep);
// Reset bound values
sqlite3_reset(stmt);
}
- pakfire_relationlist_unref(list);
+ free(list);
}
// All okay
const struct dependency {
unsigned int field;
- void (*func)(PakfirePackage pkg, PakfireRelationList list);
+ void (*func)(PakfirePackage pkg, const char* dep);
} dependencies[] = {
- { 17, pakfire_package_set_provides },
- { 18, pakfire_package_set_prerequires },
- { 10, pakfire_package_set_requires },
- { 20, pakfire_package_set_conflicts },
- { 21, pakfire_package_set_obsoletes },
- { 22, pakfire_package_set_recommends },
- { 23, pakfire_package_set_suggests },
- { 24, pakfire_package_set_supplements },
- { 25, pakfire_package_set_enhances },
+ { 17, pakfire_package_add_provides },
+ { 18, pakfire_package_add_prerequires },
+ { 10, pakfire_package_add_requires },
+ { 20, pakfire_package_add_conflicts },
+ { 21, pakfire_package_add_obsoletes },
+ { 22, pakfire_package_add_recommends },
+ { 23, pakfire_package_add_suggests },
+ { 24, pakfire_package_add_supplements },
+ { 25, pakfire_package_add_enhances },
{ 0, NULL },
};
for (const struct dependency* deps = dependencies; deps->field; deps++) {
const char* relations = (const char*)sqlite3_column_text(stmt, deps->field);
if (relations) {
- PakfireRelationList list;
-
- r = pakfire_relationlist_create_from_string(&list, db->pakfire, relations);
- if (r)
+ // Copy list
+ char* p = strdupa(relations);
+ if (!p) {
+ r = 1;
goto ERROR;
+ }
+
+ while (*p) {
+ char* e = strchr(p, '\n');
+
+ // Terminate the string
+ if (e)
+ *e = '\0';
- deps->func(pkg, list);
- pakfire_relationlist_unref(list);
+ // Add the dependency
+ deps->func(pkg, p);
+
+ // End loop when we reached the end
+ if (!e)
+ break;
+
+ // Or continue at the next line
+ p = e + 1;
+ }
}
}
time_t pakfire_package_get_install_time(PakfirePackage pkg);
void pakfire_package_set_install_time(PakfirePackage pkg, time_t install_time);
-PakfireRelationList pakfire_package_get_provides(PakfirePackage pkg);
-void pakfire_package_set_provides(PakfirePackage pkg, PakfireRelationList relationlist);
-void pakfire_package_add_provides(PakfirePackage pkg, PakfireRelation relation);
-PakfireRelationList pakfire_package_get_prerequires(PakfirePackage pkg);
-void pakfire_package_set_prerequires(PakfirePackage pkg, PakfireRelationList relationlist);
-PakfireRelationList pakfire_package_get_requires(PakfirePackage pkg);
-void pakfire_package_set_requires(PakfirePackage pkg, PakfireRelationList relationlist);
-void pakfire_package_add_requires(PakfirePackage pkg, PakfireRelation relation);
-PakfireRelationList pakfire_package_get_conflicts(PakfirePackage pkg);
-void pakfire_package_set_conflicts(PakfirePackage pkg, PakfireRelationList relationlist);
-void pakfire_package_add_conflicts(PakfirePackage pkg, PakfireRelation relation);
-PakfireRelationList pakfire_package_get_obsoletes(PakfirePackage pkg);
-void pakfire_package_set_obsoletes(PakfirePackage pkg, PakfireRelationList relationlist);
-void pakfire_package_add_obsoletes(PakfirePackage pkg, PakfireRelation relation);
-PakfireRelationList pakfire_package_get_recommends(PakfirePackage pkg);
-void pakfire_package_set_recommends(PakfirePackage pkg, PakfireRelationList relationlist);
-void pakfire_package_add_recommends(PakfirePackage pkg, PakfireRelation relation);
-PakfireRelationList pakfire_package_get_suggests(PakfirePackage pkg);
-void pakfire_package_set_suggests(PakfirePackage pkg, PakfireRelationList relationlist);
-void pakfire_package_add_suggests(PakfirePackage pkg, PakfireRelation relation);
-PakfireRelationList pakfire_package_get_supplements(PakfirePackage pkg);
-void pakfire_package_set_supplements(PakfirePackage pkg, PakfireRelationList relationlist);
-PakfireRelationList pakfire_package_get_enhances(PakfirePackage pkg);
-void pakfire_package_set_enhances(PakfirePackage pkg, PakfireRelationList relationlist);
+char** pakfire_package_get_provides(PakfirePackage pkg);
+char** pakfire_package_get_prerequires(PakfirePackage pkg);
+char** pakfire_package_get_requires(PakfirePackage pkg);
+char** pakfire_package_get_conflicts(PakfirePackage pkg);
+char** pakfire_package_get_obsoletes(PakfirePackage pkg);
+char** pakfire_package_get_recommends(PakfirePackage pkg);
+char** pakfire_package_get_suggests(PakfirePackage pkg);
+char** pakfire_package_get_supplements(PakfirePackage pkg);
+char** pakfire_package_get_enhances(PakfirePackage pkg);
PakfireRepo pakfire_package_get_repo(PakfirePackage pkg);
char* pakfire_package_join_evr(const char* e, const char* v, const char* r);
+void pakfire_package_add_provides(PakfirePackage pkg, const char* dep);
+void pakfire_package_add_prerequires(PakfirePackage pkg, const char* dep);
+void pakfire_package_add_requires(PakfirePackage pkg, const char* dep);
+void pakfire_package_add_conflicts(PakfirePackage pkg, const char* dep);
+void pakfire_package_add_obsoletes(PakfirePackage pkg, const char* dep);
+void pakfire_package_add_recommends(PakfirePackage pkg, const char* dep);
+void pakfire_package_add_suggests(PakfirePackage pkg, const char* dep);
+void pakfire_package_add_supplements(PakfirePackage pkg, const char* dep);
+void pakfire_package_add_enhances(PakfirePackage pkg, const char* dep);
+
#endif
#endif /* PAKFIRE_PACKAGE_H */
};
static void pakfire_package_add_self_provides(Pakfire pakfire, PakfirePackage pkg, const char* name, const char* evr) {
- PakfireRelation relation = pakfire_relation_create(pakfire, name, PAKFIRE_EQ, evr);
- pakfire_package_add_provides(pkg, relation);
- pakfire_relation_unref(relation);
+ char buffer[1024];
+ pakfire_string_format(buffer, "%s = %s", name, evr);
+
+ pakfire_package_add_provides(pkg, buffer);
}
PakfirePackage pakfire_package_create_from_solvable(Pakfire pakfire, Id id) {
pakfire_package_set_num(pkg, SOLVABLE_INSTALLTIME, install_time);
}
-static PakfireRelationList pakfire_package_get_relationlist(
+static char** pakfire_package_get_relationlist(
PakfirePackage pkg, Id type, Id marker) {
+ char** array = NULL;
+
Queue q;
queue_init(&q);
Solvable* s = get_solvable(pkg);
+
+ // Fetch all deps
solvable_lookup_deparray(s, type, &q, marker);
- PakfireRelationList list;
- int r = pakfire_relationlist_from_queue(&list, pkg->pakfire, q);
+ // Nothing to do if the array was empty
+ if (!q.count)
+ goto ERROR;
- queue_free(&q);
+ Pool* pool = pakfire_get_solv_pool(pkg->pakfire);
- if (r)
- return NULL;
+ // Allocate array
+ array = calloc(q.count + 1, sizeof(*array));
+ if (!array)
+ goto ERROR;
+
+ for (int i = 0; i < q.count; i++) {
+ const char* dep = pool_dep2str(pool, q.elements[i]);
- return list;
+ array[i] = strdup(dep);
+ }
+
+ERROR:
+ queue_free(&q);
+
+ return array;
}
static void pakfire_package_set_relationlist(PakfirePackage pkg, Id type,
#endif
}
-static void pakfire_package_add_relation(PakfirePackage pkg, Id type,
- PakfireRelation relation, Id marker) {
+static void pakfire_package_add_dep(PakfirePackage pkg, Id type,
+ const char* dep, Id marker) {
Solvable* s = get_solvable(pkg);
- solvable_add_deparray(s, type, pakfire_relation_get_id(relation), marker);
+ // Parse the dependency
+ Id id = pakfire_parse_dep(pkg->pakfire, dep);
+ if (!id)
+ return;
+
+ solvable_add_deparray(s, type, id, marker);
}
-PAKFIRE_EXPORT PakfireRelationList pakfire_package_get_provides(PakfirePackage pkg) {
+PAKFIRE_EXPORT char** pakfire_package_get_provides(PakfirePackage pkg) {
return pakfire_package_get_relationlist(pkg, SOLVABLE_PROVIDES, -SOLVABLE_FILEMARKER);
}
pakfire_package_set_relationlist(pkg, SOLVABLE_PROVIDES, relationlist, -SOLVABLE_FILEMARKER);
}
-PAKFIRE_EXPORT void pakfire_package_add_provides(PakfirePackage pkg, PakfireRelation relation) {
- pakfire_package_add_relation(pkg, SOLVABLE_PROVIDES, relation, -SOLVABLE_FILEMARKER);
+PAKFIRE_EXPORT void pakfire_package_add_provides(PakfirePackage pkg, const char* dep) {
+ pakfire_package_add_dep(pkg, SOLVABLE_PROVIDES, dep, -SOLVABLE_FILEMARKER);
}
-PAKFIRE_EXPORT PakfireRelationList pakfire_package_get_prerequires(PakfirePackage pkg) {
+PAKFIRE_EXPORT char** pakfire_package_get_prerequires(PakfirePackage pkg) {
return pakfire_package_get_relationlist(pkg, SOLVABLE_REQUIRES, SOLVABLE_PREREQMARKER);
}
pakfire_package_set_relationlist(pkg, SOLVABLE_REQUIRES, relationlist, SOLVABLE_PREREQMARKER);
}
-PAKFIRE_EXPORT PakfireRelationList pakfire_package_get_requires(PakfirePackage pkg) {
+PAKFIRE_EXPORT void pakfire_package_add_prerequires(PakfirePackage pkg, const char* dep) {
+ pakfire_package_add_dep(pkg, SOLVABLE_REQUIRES, dep, SOLVABLE_PREREQMARKER);
+}
+
+PAKFIRE_EXPORT char** pakfire_package_get_requires(PakfirePackage pkg) {
return pakfire_package_get_relationlist(pkg, SOLVABLE_REQUIRES, -SOLVABLE_PREREQMARKER);
}
pakfire_package_set_relationlist(pkg, SOLVABLE_REQUIRES, relationlist, -SOLVABLE_PREREQMARKER);
}
-PAKFIRE_EXPORT void pakfire_package_add_requires(PakfirePackage pkg, PakfireRelation relation) {
- pakfire_package_add_relation(pkg, SOLVABLE_REQUIRES, relation, -SOLVABLE_PREREQMARKER);
+PAKFIRE_EXPORT void pakfire_package_add_requires(PakfirePackage pkg, const char* dep) {
+ pakfire_package_add_dep(pkg, SOLVABLE_REQUIRES, dep, -SOLVABLE_PREREQMARKER);
}
-PAKFIRE_EXPORT PakfireRelationList pakfire_package_get_conflicts(PakfirePackage pkg) {
+PAKFIRE_EXPORT char** pakfire_package_get_conflicts(PakfirePackage pkg) {
return pakfire_package_get_relationlist(pkg, SOLVABLE_CONFLICTS, 0);
}
pakfire_package_set_relationlist(pkg, SOLVABLE_CONFLICTS, relationlist, 0);
}
-PAKFIRE_EXPORT void pakfire_package_add_conflicts(PakfirePackage pkg, PakfireRelation relation) {
- pakfire_package_add_relation(pkg, SOLVABLE_CONFLICTS, relation, 0);
+PAKFIRE_EXPORT void pakfire_package_add_conflicts(PakfirePackage pkg, const char* dep) {
+ pakfire_package_add_dep(pkg, SOLVABLE_CONFLICTS, dep, 0);
}
-PAKFIRE_EXPORT PakfireRelationList pakfire_package_get_obsoletes(PakfirePackage pkg) {
+PAKFIRE_EXPORT char** pakfire_package_get_obsoletes(PakfirePackage pkg) {
return pakfire_package_get_relationlist(pkg, SOLVABLE_OBSOLETES, 0);
}
pakfire_package_set_relationlist(pkg, SOLVABLE_OBSOLETES, relationlist, 0);
}
-PAKFIRE_EXPORT void pakfire_package_add_obsoletes(PakfirePackage pkg, PakfireRelation relation) {
- pakfire_package_add_relation(pkg, SOLVABLE_OBSOLETES, relation, 0);
+PAKFIRE_EXPORT void pakfire_package_add_obsoletes(PakfirePackage pkg, const char* dep) {
+ pakfire_package_add_dep(pkg, SOLVABLE_OBSOLETES, dep, 0);
}
-PAKFIRE_EXPORT PakfireRelationList pakfire_package_get_recommends(PakfirePackage pkg) {
+PAKFIRE_EXPORT char** pakfire_package_get_recommends(PakfirePackage pkg) {
return pakfire_package_get_relationlist(pkg, SOLVABLE_RECOMMENDS, 0);
}
pakfire_package_set_relationlist(pkg, SOLVABLE_RECOMMENDS, relationlist, 0);
}
-PAKFIRE_EXPORT void pakfire_package_add_recommends(PakfirePackage pkg, PakfireRelation relation) {
- pakfire_package_add_relation(pkg, SOLVABLE_RECOMMENDS, relation, 0);
+PAKFIRE_EXPORT void pakfire_package_add_recommends(PakfirePackage pkg, const char* dep) {
+ pakfire_package_add_dep(pkg, SOLVABLE_RECOMMENDS, dep, 0);
}
-PAKFIRE_EXPORT PakfireRelationList pakfire_package_get_suggests(PakfirePackage pkg) {
+PAKFIRE_EXPORT char** pakfire_package_get_suggests(PakfirePackage pkg) {
return pakfire_package_get_relationlist(pkg, SOLVABLE_SUGGESTS, 0);
}
pakfire_package_set_relationlist(pkg, SOLVABLE_SUGGESTS, relationlist, 0);
}
-PAKFIRE_EXPORT void pakfire_package_add_suggests(PakfirePackage pkg, PakfireRelation relation) {
- pakfire_package_add_relation(pkg, SOLVABLE_SUGGESTS, relation, 0);
+PAKFIRE_EXPORT void pakfire_package_add_suggests(PakfirePackage pkg, const char* dep) {
+ pakfire_package_add_dep(pkg, SOLVABLE_SUGGESTS, dep, 0);
}
-PAKFIRE_EXPORT PakfireRelationList pakfire_package_get_supplements(PakfirePackage pkg) {
+PAKFIRE_EXPORT char** pakfire_package_get_supplements(PakfirePackage pkg) {
return pakfire_package_get_relationlist(pkg, SOLVABLE_SUPPLEMENTS, 0);
}
pakfire_package_set_relationlist(pkg, SOLVABLE_SUPPLEMENTS, relationlist, 0);
}
-PAKFIRE_EXPORT PakfireRelationList pakfire_package_get_enhances(PakfirePackage pkg) {
+PAKFIRE_EXPORT void pakfire_package_add_supplements(PakfirePackage pkg, const char* dep) {
+ pakfire_package_add_dep(pkg, SOLVABLE_SUPPLEMENTS, dep, 0);
+}
+
+PAKFIRE_EXPORT char** pakfire_package_get_enhances(PakfirePackage pkg) {
return pakfire_package_get_relationlist(pkg, SOLVABLE_ENHANCES, 0);
}
pakfire_package_set_relationlist(pkg, SOLVABLE_ENHANCES, relationlist, 0);
}
+PAKFIRE_EXPORT void pakfire_package_add_enhances(PakfirePackage pkg, const char* dep) {
+ pakfire_package_add_dep(pkg, SOLVABLE_ENHANCES, dep, 0);
+}
+
PAKFIRE_EXPORT PakfireRepo pakfire_package_get_repo(PakfirePackage pkg) {
if (!pkg->repo) {
Solvable* s = get_solvable(pkg);
pakfire_package_dump_add_line(str, key, val);
}
-static void pakfire_package_dump_add_line_relations(char** str, const char* key, PakfireRelationList deps) {
- pakfire_relationlist_sort(deps);
-
- size_t size = pakfire_relationlist_size(deps);
- for (unsigned int i = 0; i < size; i++) {
- PakfireRelation relation = pakfire_relationlist_get(deps, i);
-
- if (relation) {
- char* dep = pakfire_relation_str(relation);
- pakfire_relation_unref(relation);
-
- if (dep) {
- pakfire_package_dump_add_line(str, (i == 0) ? key : "", dep);
- free(dep);
- }
- }
- }
-}
-
static void pakfire_package_dump_add_line_size(char** str, const char* key, unsigned long long size) {
char buffer[128];
pakfire_format_size(buffer, sizeof(buffer) - 1, size);
const struct relation {
const char* name;
- PakfireRelationList (*get)(PakfirePackage pkg);
+ char** (*get)(PakfirePackage pkg);
} relations[] = {
{ _("Provides"), pakfire_package_get_provides, },
{ _("Pre-Requires"), pakfire_package_get_prerequires, },
};
for (const struct relation* relation = relations; relation->name; relation++) {
- PakfireRelationList list = relation->get(pkg);
+ char** list = relation->get(pkg);
if (list) {
- pakfire_package_dump_add_line_relations(&string, relation->name, list);
- pakfire_relationlist_unref(list);
+ for (char** dep = list; *dep; dep++) {
+ pakfire_package_dump_add_line(&string, relation->name, *dep);
+ free(*dep);
+ }
+ free(list);
}
}
}
const struct dependencies {
const char* type;
- PakfireRelationList (*func)(PakfirePackage pkg);
+ char** (*func)(PakfirePackage pkg);
} dependencies[] = {
{ "prerequires", pakfire_package_get_prerequires },
{ "requires", pakfire_package_get_requires },
};
for (const struct dependencies* d = dependencies; d->type; d++) {
- PakfireRelationList list = d->func(pkg);
+ char** list = d->func(pkg);
if (!list)
continue;
- size_t l = pakfire_relationlist_size(list);
-
- // Skip for empty lists
- if (l == 0) {
- pakfire_relationlist_unref(list);
- continue;
- }
-
// Write header
r = asprintf(&buffer, "%s\t%s\n", buffer, d->type);
if (r < 0) {
- pakfire_relationlist_unref(list);
goto ERROR;
}
- for (unsigned int i = 0; i < l; i++) {
- PakfireRelation rel = pakfire_relationlist_get(list, i);
-
- char* s = pakfire_relation_str(rel);
- if (s) {
- r = asprintf(&buffer, "%s\t\t%s\n", buffer, s);
- free(s);
- if (r < 0) {
- pakfire_relationlist_unref(list);
- pakfire_relation_unref(rel);
- goto ERROR;
- }
- }
-
- pakfire_relation_unref(rel);
+ for (char** dep = list; *dep; dep++) {
+ asprintf(&buffer, "%s\t\t%s\n", buffer, *dep);
+ free(*dep);
}
+ free(list);
// End block
r = asprintf(&buffer, "%s\tend\n", buffer);
if (r < 0)
goto ERROR;
-
- pakfire_relationlist_unref(list);
}
// End dependencies block