summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--meta/recipes-devtools/opkg/opkg/0008-select_higher_version.patch102
-rw-r--r--meta/recipes-devtools/opkg/opkg_svn.bb3
2 files changed, 104 insertions, 1 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
+
diff --git a/meta/recipes-devtools/opkg/opkg_svn.bb b/meta/recipes-devtools/opkg/opkg_svn.bb
index 9a03f2efa8..820a2243b2 100644
--- a/meta/recipes-devtools/opkg/opkg_svn.bb
+++ b/meta/recipes-devtools/opkg/opkg_svn.bb
@@ -8,6 +8,7 @@ SRC_URI = "svn://opkg.googlecode.com/svn;module=trunk;protocol=http \
file://0005-Do-not-read-etc-opkg-.conf-if-f-is-specified.patch \
file://0006-detect-circular-dependencies.patch \
file://0007-merge-newpkg-provides-even-when-oldpkg-provides-exis.patch \
+ file://0008-select_higher_version.patch \
"
S = "${WORKDIR}/trunk"
@@ -15,4 +16,4 @@ S = "${WORKDIR}/trunk"
SRCREV = "633"
PV = "0.1.8+svnr${SRCPV}"
-PR = "${INC_PR}.3"
+PR = "${INC_PR}.4"