X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=libopkg%2Fpkg_depends.c;h=711283ae874872ba16a1e206c88905d504e6499b;hb=546bc72356c7a6b435540852b10625b7531f2117;hp=0072e5e5290258d21612615e02b67016d8c923f8;hpb=b1dc770d157cdad8699e1b27a18530862b056575;p=oweals%2Fopkg-lede.git diff --git a/libopkg/pkg_depends.c b/libopkg/pkg_depends.c index 0072e5e..711283a 100644 --- a/libopkg/pkg_depends.c +++ b/libopkg/pkg_depends.c @@ -250,9 +250,9 @@ pkg_hash_fetch_unsatisfied_dependencies(pkg_t * pkg, pkg_vec_t * unsatisfied, if (satisfier_entry_pkg != pkg && !is_pkg_in_pkg_vec(unsatisfied, satisfier_entry_pkg)) { - pkg_vec_insert(unsatisfied, satisfier_entry_pkg); pkg_hash_fetch_unsatisfied_dependencies( satisfier_entry_pkg, unsatisfied, &newstuff); + pkg_vec_insert(unsatisfied, satisfier_entry_pkg); the_lost = merge_unresolved(the_lost, newstuff); if (newstuff) free(newstuff); @@ -422,34 +422,6 @@ int pkg_dependence_satisfiable(depend_t * depend) return 0; } -int pkg_dependence_satisfied(depend_t * depend) -{ - abstract_pkg_t *apkg = depend->pkg; - abstract_pkg_vec_t *provider_apkgs = apkg->provided_by; - int n_providers = provider_apkgs->len; - abstract_pkg_t **apkgs = provider_apkgs->pkgs; - int i; - int n_pkgs; - int j; - - for (i = 0; i < n_providers; i++) { - abstract_pkg_t *papkg = apkgs[i]; - pkg_vec_t *pkg_vec = papkg->pkgs; - if (pkg_vec) { - n_pkgs = pkg_vec->len; - for (j = 0; j < n_pkgs; j++) { - pkg_t *pkg = pkg_vec->pkgs[j]; - if (version_constraints_satisfied(depend, pkg)) { - if (pkg->state_status == SS_INSTALLED - || pkg->state_status == SS_UNPACKED) - return 1; - } - } - } - } - return 0; -} - static int is_pkg_in_pkg_vec(pkg_vec_t * vec, pkg_t * pkg) { int i; @@ -678,6 +650,14 @@ void parse_providelist(pkg_t *pkg, char *list) provided_abpkg = ensure_abstract_pkg_by_name(item); + if (provided_abpkg->state_flag & SF_NEED_DETAIL) { + if (!(ab_pkg->state_flag & SF_NEED_DETAIL)) { + opkg_msg(DEBUG, "propagating provided abpkg flag to " + "provider abpkg %s\n", ab_pkg->name); + ab_pkg->state_flag |= SF_NEED_DETAIL; + } + } + if (!abstract_pkg_vec_contains(provided_abpkg->provided_by, ab_pkg)) abstract_pkg_vec_insert(provided_abpkg->provided_by, ab_pkg); @@ -727,8 +707,10 @@ void parse_replacelist(pkg_t *pkg, char *list) /* if a package pkg both replaces and conflicts old_abpkg, * then add it to the replaced_by vector so that old_abpkg * will be upgraded to ab_pkg automatically */ - if (pkg_conflicts_abstract(pkg, old_abpkg)) - abstract_pkg_vec_insert(old_abpkg->replaced_by, ab_pkg); + if (pkg_conflicts_abstract(pkg, old_abpkg)) { + if (!abstract_pkg_vec_contains(old_abpkg->replaced_by, ab_pkg)) + abstract_pkg_vec_insert(old_abpkg->replaced_by, ab_pkg); + } replaces = tmp; replaces[count - 1] = old_abpkg;