From f49029c681653044d19450f6c278bf54543d0d18 Mon Sep 17 00:00:00 2001 From: Ariadne Conill Date: Fri, 11 Aug 2023 14:19:26 -0700 Subject: [PATCH] cli: ensure --modversion is output is printed in dependency queue order Previously, --modversion operated on the calculated solution and printed versions in order of the calculated dependency graph. Change this to use the dependency queue instead, looking up nodes in the dependency graph as needed, to ensure that the --modversion output behaves as intended. Signed-off-by: Ariadne Conill --- cli/main.c | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/cli/main.c b/cli/main.c index edd28c0..25ff5ca 100644 --- a/cli/main.c +++ b/cli/main.c @@ -289,23 +289,32 @@ apply_digraph(pkgconf_client_t *client, pkgconf_pkg_t *world, void *unused, int #endif static bool -apply_modversion(pkgconf_client_t *client, pkgconf_pkg_t *world, void *unused, int maxdepth) +apply_modversion(pkgconf_client_t *client, pkgconf_pkg_t *world, void *data, int maxdepth) { - pkgconf_node_t *iter; + pkgconf_node_t *queue_iter; + pkgconf_list_t *pkgq = data; (void) client; - (void) unused; (void) maxdepth; - PKGCONF_FOREACH_LIST_ENTRY(world->required.head, iter) + PKGCONF_FOREACH_LIST_ENTRY(pkgq->head, queue_iter) { - pkgconf_dependency_t *dep = iter->data; - pkgconf_pkg_t *pkg = dep->match; + pkgconf_node_t *world_iter; + pkgconf_queue_t *queue_node = queue_iter->data; - if (pkg->version != NULL) { - if (verbosity) - printf("%s: ", pkg->id); + PKGCONF_FOREACH_LIST_ENTRY(world->required.head, world_iter) + { + pkgconf_dependency_t *dep = world_iter->data; + pkgconf_pkg_t *pkg = dep->match; - printf("%s\n", pkg->version); + if (strncmp(pkg->id, queue_node->package, strlen(pkg->id))) + continue; + + if (pkg->version != NULL) { + if (verbosity) + printf("%s: ", pkg->id); + + printf("%s\n", pkg->version); + } } } @@ -1430,7 +1439,7 @@ cleanup3: if ((want_flags & PKG_MODVERSION) == PKG_MODVERSION) { want_flags &= ~(PKG_CFLAGS|PKG_LIBS); - apply_modversion(&pkg_client, &world, NULL, 2); + apply_modversion(&pkg_client, &world, &pkgq, 2); } if ((want_flags & PKG_PATH) == PKG_PATH)