summaryrefslogtreecommitdiffstats
path: root/libopkg/pkg_hash.c
diff options
context:
space:
mode:
authorpixdamix@gmail.com <pixdamix@gmail.com@e8e0d7a0-c8d9-11dd-a880-a1081c7ac358>2012-11-22 04:18:13 (EST)
committer pixdamix@gmail.com <pixdamix@gmail.com@e8e0d7a0-c8d9-11dd-a880-a1081c7ac358>2012-11-22 04:18:13 (EST)
commit15f255915ce893750165c89af9d1ebbbc571a8dc (patch)
tree6b2a4e8bf8572fab6e57a6f9062638c3dbb83168 /libopkg/pkg_hash.c
parent2ba1bc82c6dd55d6ad3903d7b9f25861f1b42ef8 (diff)
Add the --prefer-arch-to-version option
If there were more than one candidate which had the same pkg name in the candidate list, for example, the same pkg with different versions, then it would use the last one which was the highest version one in the past, but it will use the higher arch priority when this option is specified. Signed-off-by: Robert Yang <liezhi.yang@windriver.com> git-svn-id: http://opkg.googlecode.com/svn/trunk@643 e8e0d7a0-c8d9-11dd-a880-a1081c7ac358
Diffstat (limited to 'libopkg/pkg_hash.c')
-rw-r--r--libopkg/pkg_hash.c18
1 files changed, 15 insertions, 3 deletions
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;
}
}