summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Spooren2020-10-27 02:39:57 +0000
committerDaniel Golle2020-10-30 00:15:14 +0000
commit8769c75199b4668878176bde0e5faebf3bc61663 (patch)
tree56d7b0ed688577a8d43fceb5d58e7bdc4f56ab05
parentcf44c2feb606b60ba3f35392e102c281ef6ea0da (diff)
downloadopkg-lede-8769c75199b4668878176bde0e5faebf3bc61663.tar.gz
pkg_hash: don't suggest incompatible packages
Up until now opkg would suggest packages with unsatisfied dependencies as installable candidates. This is a frequent issue for the kmod feed in snapshot images. In these cases opkg suggest a newer kmod version than compatible with the installed kernel, because the same package is available both in the kmods archive and the target specific packages feed. This commit fixes the issue by dropping all package problematic candidates by checking if all their dependencies could be installed. Signed-off-by: Paul Spooren <mail@aparcar.org>
-rw-r--r--libopkg/pkg_hash.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/libopkg/pkg_hash.c b/libopkg/pkg_hash.c
index 52c64ff..6715ebd 100644
--- a/libopkg/pkg_hash.c
+++ b/libopkg/pkg_hash.c
@@ -20,6 +20,7 @@
#include "hash_table.h"
#include "pkg.h"
#include "opkg_message.h"
+#include "pkg_depends.h"
#include "pkg_vec.h"
#include "pkg_hash.h"
#include "parse_util.h"
@@ -376,10 +377,23 @@ pkg_t *pkg_hash_fetch_best_installation_candidate(abstract_pkg_t * apkg,
if ((arch_priority > 0)
&&
(!pkg_vec_contains(matching_pkgs, maybe))) {
- max_count++;
- abstract_pkg_vec_insert(matching_apkgs,
- maybe->parent);
- pkg_vec_insert(matching_pkgs, maybe);
+ char **unresolved = NULL;
+ pkg_vec_t *depends = pkg_vec_alloc();
+ pkg_hash_fetch_unsatisfied_dependencies(maybe, depends,
+ &unresolved);
+
+ if (!unresolved) {
+ max_count++;
+ abstract_pkg_vec_insert(matching_apkgs,
+ maybe->parent);
+ pkg_vec_insert(matching_pkgs, maybe);
+ } else {
+ char **tmp = unresolved;
+ while (tmp)
+ free(*(tmp++));
+ free(unresolved);
+ }
+ pkg_vec_free(depends);
}
}