From: Michael Tremer Date: Thu, 11 Feb 2021 16:06:29 +0000 (+0000) Subject: relationlists: Sort before printing them X-Git-Tag: 0.9.28~1285^2~759 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7ac9a26bb72114872933986088a55ba08643a856;p=pakfire.git relationlists: Sort before printing them Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/include/pakfire/relationlist.h b/src/libpakfire/include/pakfire/relationlist.h index a907fcf3e..9ca38a0fb 100644 --- a/src/libpakfire/include/pakfire/relationlist.h +++ b/src/libpakfire/include/pakfire/relationlist.h @@ -35,6 +35,8 @@ size_t pakfire_relationlist_size(PakfireRelationList relationlist); PakfireRelation pakfire_relationlist_get(PakfireRelationList relationlist, int index); +void pakfire_relationlist_sort(PakfireRelationList list); + #ifdef PAKFIRE_PRIVATE int pakfire_relationlist_from_queue(PakfireRelationList* list, Pakfire pakfire, Queue q); diff --git a/src/libpakfire/libpakfire.sym b/src/libpakfire/libpakfire.sym index db013f1a7..50e0ac0a4 100644 --- a/src/libpakfire/libpakfire.sym +++ b/src/libpakfire/libpakfire.sym @@ -321,6 +321,7 @@ global: pakfire_relationlist_get; pakfire_relationlist_ref; pakfire_relationlist_size; + pakfire_relationlist_sort; pakfire_relationlist_unref; # request diff --git a/src/libpakfire/package.c b/src/libpakfire/package.c index cb6fd38aa..fa836a612 100644 --- a/src/libpakfire/package.c +++ b/src/libpakfire/package.c @@ -734,6 +734,8 @@ static void pakfire_package_dump_add_line_date(char** str, const char* key, unsi } 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); diff --git a/src/libpakfire/relationlist.c b/src/libpakfire/relationlist.c index 1cfd95541..af8f004ec 100644 --- a/src/libpakfire/relationlist.c +++ b/src/libpakfire/relationlist.c @@ -20,6 +20,7 @@ #include #include +#include #include #include @@ -137,3 +138,17 @@ PAKFIRE_EXPORT PakfireRelation pakfire_relationlist_get(PakfireRelationList rela Queue* pakfire_relationlist_get_queue(PakfireRelationList list) { return &list->queue; } + +static int __sort(const void* _rel1, const void* _rel2, void* _pool) { + const char* s1 = pool_dep2str((Pool*)_pool, *(Id*)_rel1); + const char* s2 = pool_dep2str((Pool*)_pool, *(Id*)_rel2); + + return strcmp(s1, s2); +} + +PAKFIRE_EXPORT void pakfire_relationlist_sort(PakfireRelationList list) { + Pool* pool = pakfire_get_solv_pool(list->pakfire); + + qsort_r(list->queue.elements, list->queue.count, sizeof(*list->queue.elements), + __sort, pool); +}