aboutsummaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/opkg/opkg/0008-select_higher_version.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-devtools/opkg/opkg/0008-select_higher_version.patch')
-rw-r--r--meta/recipes-devtools/opkg/opkg/0008-select_higher_version.patch102
1 files changed, 102 insertions, 0 deletions
diff --git a/meta/recipes-devtools/opkg/opkg/0008-select_higher_version.patch b/meta/recipes-devtools/opkg/opkg/0008-select_higher_version.patch
new file mode 100644
index 0000000000..46d11b0872
--- /dev/null
+++ b/meta/recipes-devtools/opkg/opkg/0008-select_higher_version.patch
@@ -0,0 +1,102 @@
+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.
+
+Upstream-Status: Pending
+
+Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
+---
+ libopkg/opkg_conf.h | 1 +
+ libopkg/pkg_hash.c | 18 +++++++++++++++---
+ src/opkg-cl.c | 9 +++++++++
+ 3 files changed, 25 insertions(+), 3 deletions(-)
+
+diff --git a/libopkg/opkg_conf.h b/libopkg/opkg_conf.h
+--- 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 select_higher_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
+--- 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->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;
+ }
+ }
+
+diff --git a/src/opkg-cl.c b/src/opkg-cl.c
+--- a/src/opkg-cl.c
++++ b/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");
+--
+1.7.1
+