Skip to content
Browse files

Add the --select-higher-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 one now.

Add the "--select-higher-version" option to let it use the higher
version package when enabled. the default is no.

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
  • Loading branch information...
1 parent 3340b12 commit 31cd02748838a76d922205b65b7d6405b429a6fe Robert Yang committed with
Showing with 25 additions and 3 deletions.
  1. +1 −0 libopkg/opkg_conf.h
  2. +15 −3 libopkg/pkg_hash.c
  3. +9 −0 src/opkg-cl.c
View
1 libopkg/opkg_conf.h
@@ -77,6 +77,7 @@ struct opkg_conf
int force_removal_of_essential_packages;
int force_postinstall;
int force_remove;
+ int select_higher_version;
int check_signature;
int nodeps; /* do not follow dependencies */
char *offline_root;
View
18 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->select_higher_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;
}
}
View
9 src/opkg-cl.c
@@ -42,6 +42,7 @@ enum {
ARGS_OPT_FORCE_SPACE,
ARGS_OPT_FORCE_POSTINSTALL,
ARGS_OPT_FORCE_REMOVE,
+ ARGS_OPT_SELECT_HIGHER_VERSION,
ARGS_OPT_ADD_ARCH,
ARGS_OPT_ADD_DEST,
ARGS_OPT_NOACTION,
@@ -83,6 +84,8 @@ static struct option long_options[] = {
{"force_postinstall", 0, 0, ARGS_OPT_FORCE_POSTINSTALL},
{"force-remove", 0, 0, ARGS_OPT_FORCE_REMOVE},
{"force_remove", 0, 0, ARGS_OPT_FORCE_REMOVE},
+ {"select-higher-version", 0, 0, ARGS_OPT_SELECT_HIGHER_VERSION},
+ {"select_higher_version", 0, 0, ARGS_OPT_SELECT_HIGHER_VERSION},
{"noaction", 0, 0, ARGS_OPT_NOACTION},
{"download-only", 0, 0, ARGS_OPT_DOWNLOAD_ONLY},
{"nodeps", 0, 0, ARGS_OPT_NODEPS},
@@ -173,6 +176,9 @@ args_parse(int argc, char *argv[])
case ARGS_OPT_FORCE_REMOVE:
conf->force_remove = 1;
break;
+ case ARGS_OPT_SELECT_HIGHER_VERSION:
+ conf->select_higher_version = 1;
+ break;
case ARGS_OPT_NODEPS:
conf->nodeps = 1;
break;
@@ -271,6 +277,9 @@ usage()
printf("\t--offline-root <dir> offline installation of packages.\n");
printf("\t--add-arch <arch>:<prio> Register architecture with given priority\n");
printf("\t--add-dest <name>:<path> Register destination with given path\n");
+ printf("\t--select-higher-version\t Use the higher version package rather\n");
+ printf("\t than the higher arch priority one if more\n");
+ printf("\t than one candidate is found.\n");
printf("\nForce Options:\n");
printf("\t--force-depends Install/remove despite failed dependencies\n");

0 comments on commit 31cd027

Please sign in to comment.
Something went wrong with that request. Please try again.