diff options
-rw-r--r-- | meta/recipes-devtools/opkg/opkg/0008-select_higher_version.patch | 102 | ||||
-rw-r--r-- | meta/recipes-devtools/opkg/opkg_svn.bb | 3 |
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" |