diff options
Diffstat (limited to 'libopkg')
-rw-r--r-- | libopkg/opkg_conf.h | 1 | ||||
-rw-r--r-- | libopkg/pkg_hash.c | 18 |
2 files changed, 16 insertions, 3 deletions
diff --git a/libopkg/opkg_conf.h b/libopkg/opkg_conf.h index 3a60bc5..75b4cd6 100644 --- a/libopkg/opkg_conf.h +++ b/libopkg/opkg_conf.h @@ -77,6 +77,7 @@ struct opkg_conf int force_removal_of_essential_packages; int force_postinstall; int force_remove; + int prefer_arch_to_version; int check_signature; int nodeps; /* do not follow dependencies */ char *offline_root; diff --git a/libopkg/pkg_hash.c b/libopkg/pkg_hash.c index a99cf6b..4bc0c3a 100644 --- a/libopkg/pkg_hash.c +++ b/libopkg/pkg_hash.c @@ -376,10 +376,22 @@ pkg_hash_fetch_best_installation_candidate(abstract_pkg_t *apkg, if (constraint_fcn(matching, cdata)) { opkg_msg(DEBUG, "Candidate: %s %s.\n", matching->name, matching->version) ; - good_pkg_by_name = matching; /* It has been provided by hand, so it is what user want */ - if (matching->provided_by_hand == 1) - break; + if (matching->provided_by_hand == 1) { + good_pkg_by_name = matching; + break; + } + /* Respect to the arch priorities when given alternatives */ + if (good_pkg_by_name && conf->prefer_arch_to_version) { + if (matching->arch_priority >= good_pkg_by_name->arch_priority) { + good_pkg_by_name = matching; + opkg_msg(DEBUG, "%s %s wins by priority.\n", + matching->name, matching->version) ; + } else + opkg_msg(DEBUG, "%s %s wins by priority.\n", + good_pkg_by_name->name, good_pkg_by_name->version) ; + } else + good_pkg_by_name = matching; } } |