return _import_keylist(self, keys);
}
-static PyObject* Pakfire_whatprovides(PakfireObject* self, PyObject* args, PyObject* kwds) {
- char* kwlist[] = {"provides", "glob", "icase", "name_only", NULL};
-
- const char* provides;
- int glob = 0;
- int icase = 0;
- int name_only = 0;
+static PyObject* Pakfire_whatprovides(PakfireObject* self, PyObject* args) {
+ const char* provides = NULL;
+ struct pakfire_packagelist* list = NULL;
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|iii", kwlist, &provides, &glob, &icase, &name_only))
+ if (!PyArg_ParseTuple(args, "s", &provides))
return NULL;
- int flags = 0;
- if (glob)
- flags |= PAKFIRE_GLOB;
- if (icase)
- flags |= PAKFIRE_ICASE;
- if (name_only)
- flags |= PAKFIRE_NAME_ONLY;
-
- struct pakfire_packagelist* list = pakfire_whatprovides(self->pakfire, provides, flags);
+ int r = pakfire_whatprovides(self->pakfire, provides, 0, &list);
+ if (r) {
+ PyErr_SetFromErrno(PyExc_OSError);
+ return NULL;
+ }
PyObject* obj = PyList_FromPackageList(list);
pakfire_packagelist_unref(list);
{
"whatprovides",
(PyCFunction)Pakfire_whatprovides,
- METH_VARARGS|METH_KEYWORDS,
+ METH_VARARGS,
NULL
},
{
return list;
}
-static struct pakfire_packagelist* pakfire_search_name(Pakfire pakfire, const char* name, int flags) {
- struct pakfire_packagelist* list = NULL;
-
- if (!flags) {
- int r = pakfire_packagelist_create(&list, pakfire);
- if (r)
- return NULL;
-
- pakfire_pool_apply_changes(pakfire);
-
- Id id = pool_str2id(pakfire->pool, name, 0);
- if (id == 0)
- return list;
-
- Id p, pp;
- Pool* pool = pakfire->pool;
- FOR_PROVIDES(p, pp, id) {
- Solvable* s = pool_id2solvable(pakfire->pool, p);
-
- if (s->name == id) {
- struct pakfire_package* pkg = pakfire_package_create_from_solvable(pakfire, p);
- pakfire_packagelist_push_if_not_exists(list, pkg);
- }
- }
-
- return list;
- }
-
- return pakfire_pool_dataiterator(pakfire, name, SOLVABLE_NAME, flags);
-}
-
-static struct pakfire_packagelist* pakfire_search_provides(Pakfire pakfire, const char* provides, int flags) {
- struct pakfire_packagelist* list = NULL;
-
- if (!flags) {
- int r = pakfire_packagelist_create(&list, pakfire);
- if (r)
- return NULL;
-
- pakfire_pool_apply_changes(pakfire);
-
- Id id = pool_str2id(pakfire->pool, provides, 0);
- if (id == 0)
- return list;
-
- Id p, pp;
- Pool* pool = pakfire->pool;
- FOR_PROVIDES(p, pp, id) {
- struct pakfire_package* pkg = pakfire_package_create_from_solvable(pakfire, p);
- pakfire_packagelist_push_if_not_exists(list, pkg);
- }
-
- return list;
- }
-
- return pakfire_pool_dataiterator(pakfire, provides, SOLVABLE_PROVIDES, flags);
-}
-
-PAKFIRE_EXPORT struct pakfire_packagelist* pakfire_whatprovides(Pakfire pakfire, const char* what, int flags) {
- // Refresh repositories
- int r = pakfire_refresh(pakfire, 0);
- if (r)
- return NULL;
-
- if (flags & PAKFIRE_NAME_ONLY) {
- flags &= ~PAKFIRE_NAME_ONLY;
-
- return pakfire_search_name(pakfire, what, flags);
- } else {
- return pakfire_search_provides(pakfire, what, flags);
- }
-}
-
-PAKFIRE_EXPORT int pakfire_whatrequires(Pakfire pakfire, const char* what, int flags,
+static int pakfire_search_dep(Pakfire pakfire, Id type, const char* what, int flags,
struct pakfire_packagelist** list) {
// Refresh repositories
int r = pakfire_refresh(pakfire, 0);
queue_init(&matches);
// Search for anything that matches
- pool_whatmatchesdep(pakfire->pool, SOLVABLE_REQUIRES, dep, &matches, 0);
+ pool_whatmatchesdep(pakfire->pool, type, dep, &matches, 0);
// Create a packagelist
r = pakfire_packagelist_create_from_queue(list, pakfire, &matches);
return r;
}
+PAKFIRE_EXPORT int pakfire_whatprovides(Pakfire pakfire, const char* what, int flags,
+ struct pakfire_packagelist** list) {
+ return pakfire_search_dep(pakfire, SOLVABLE_PROVIDES, what, flags, list);
+}
+
+PAKFIRE_EXPORT int pakfire_whatrequires(Pakfire pakfire, const char* what, int flags,
+ struct pakfire_packagelist** list) {
+ return pakfire_search_dep(pakfire, SOLVABLE_REQUIRES, what, flags, list);
+}
+
PAKFIRE_EXPORT struct pakfire_packagelist* pakfire_search(Pakfire pakfire, const char* what, int flags) {
// Refresh repositories
int r = pakfire_refresh(pakfire, 0);