From a685c9ee410c7efb5e3199842c17a284ccff18fb Mon Sep 17 00:00:00 2001 From: Juan RP Date: Tue, 25 Jan 2011 16:04:37 +0100 Subject: [PATCH] xbps_sort_pkg_deps: exit from the loop immediately if all pkgs were sorted. --- lib/transaction_sortdeps.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/lib/transaction_sortdeps.c b/lib/transaction_sortdeps.c index f392864e..46022c03 100644 --- a/lib/transaction_sortdeps.c +++ b/lib/transaction_sortdeps.c @@ -99,6 +99,10 @@ again: * Order all deps by looking at its run_depends array. */ while ((obj = prop_object_iterator_next(iter)) != NULL) { + /* no more iterations required, pkglist is sorted */ + if (cnt >= ndeps) + break; + prop_dictionary_get_cstring_nocopy(obj, "pkgname", &pkgname); prop_dictionary_get_cstring_nocopy(obj, "pkgver", &pkgver); xbps_dbg_printf("Sorting package '%s': ", pkgver); @@ -108,7 +112,7 @@ again: done = false; prop_dictionary_get_bool(obj, "sorted", &done); if (done) { - xbps_dbg_printf_append("skipping, already queued.\n", + xbps_dbg_printf_append("skipping, already sorted.\n", pkgname); continue; } @@ -130,13 +134,11 @@ again: rv = ENOMEM; goto out; } + xbps_dbg_printf_append("\n"); /* * Iterate over the run_depends array, and find out if they * were already added in the sorted list. */ - xbps_dbg_printf_append("\n"); - xbps_dbg_printf("Checking '%s' run depends for sorting...\n", - pkgver); while ((obj2 = prop_object_iterator_next(iter2)) != NULL) { str = prop_string_cstring_nocopy(obj2); if (str == NULL) { @@ -172,13 +174,13 @@ again: prop_array_add(sorted, obj); prop_dictionary_set_bool(obj, "sorted", true); xbps_dbg_printf("Added package '%s' to the sorted " - "queue (all rundeps satisfied).\n\n", pkgver); + "queue (all rundeps satisfied).\n", pkgver); rundepscnt = 0; cnt++; continue; } xbps_dbg_printf("Unsorted package '%s' has missing " - "rundeps (missing %zu).\n\n", pkgver, + "rundeps (missing %zu).\n", pkgver, prop_array_count(rundeps) - rundepscnt); rundepscnt = 0; } @@ -187,7 +189,6 @@ again: xbps_dbg_printf("Missing required deps! queued: %zu " "required: %zu.\n", cnt, ndeps); prop_object_iterator_reset(iter); - xbps_dbg_printf("total iteratons %zu\n", cnt); goto again; } prop_object_iterator_release(iter);