diff --git a/lib/repository_findpkg.c b/lib/repository_findpkg.c index 0b458201..79ebefc9 100644 --- a/lib/repository_findpkg.c +++ b/lib/repository_findpkg.c @@ -205,6 +205,14 @@ xbps_repository_get_transaction_dict(void) * Sort package list if necessary. */ if ((rv = xbps_sort_pkg_deps(trans_dict)) != 0) { + /* + * If there are missing deps (errno==ENOENT) + * return the dictionary, the client should always + * check if that's the case. + */ + if (errno == ENOENT) + return trans_dict; + errno = rv; return NULL; } diff --git a/lib/sortdeps.c b/lib/sortdeps.c index 1c1dddef..25dad620 100644 --- a/lib/sortdeps.c +++ b/lib/sortdeps.c @@ -62,7 +62,7 @@ find_sorteddep_by_name(const char *pkgname) int HIDDEN xbps_sort_pkg_deps(prop_dictionary_t chaindeps) { - prop_array_t sorted, unsorted, rundeps; + prop_array_t sorted, unsorted, rundeps, missingdeps; prop_object_t obj, obj2; prop_object_iterator_t iter, iter2; struct sorted_dependency *sdep; @@ -73,6 +73,13 @@ xbps_sort_pkg_deps(prop_dictionary_t chaindeps) assert(chaindeps != NULL); + /* + * If there are missing dependencies, bail out. + */ + missingdeps = prop_dictionary_get(chaindeps, "missing_deps"); + if (prop_array_count(missingdeps) > 0) + return ENOENT; + sorted = prop_array_create(); if (sorted == NULL) return ENOMEM;