diff options
author | Mark Hatle <mark.hatle@windriver.com> | 2012-06-11 13:18:55 -0500 |
---|---|---|
committer | Andreas Oberritter <obi@opendreambox.org> | 2014-03-05 00:36:33 +0100 |
commit | 8695e0537fba1b2b14b86cce2033287678fde429 (patch) | |
tree | fdc892859f9c7eda6190c46a2df1060c88c57782 /meta | |
parent | fa334c5dc969f3551a836957a924def892576b52 (diff) | |
download | openembedded-core-contrib-8695e0537fba1b2b14b86cce2033287678fde429.tar.gz |
package_rpm: Add capability to directly query packageorigin
Add functionality to RPM to directly query the packageorigin (path) from
the resolver database, instead of having to do this via an indirect method.
This results in a minor performance improvement.
Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit a8ff3141fd78442bf328c9d3a489db88ad27486b)
Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
Diffstat (limited to 'meta')
-rw-r--r-- | meta/classes/package_rpm.bbclass | 18 | ||||
-rw-r--r-- | meta/recipes-devtools/rpm/rpm/rpm-packageorigin.patch | 23 | ||||
-rw-r--r-- | meta/recipes-devtools/rpm/rpm_5.4.9.bb | 3 |
3 files changed, 34 insertions, 10 deletions
diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass index ffe3b312ff..50a4fb678e 100644 --- a/meta/classes/package_rpm.bbclass +++ b/meta/classes/package_rpm.bbclass @@ -140,12 +140,12 @@ resolve_package_rpm () { shift local pkg_name="" for solve in `cat ${conffile}`; do - pkg_name=$(${RPM} -D "_dbpath $solve" -D "__dbi_txn create nofsync" -q --yaml $@ | grep -i 'Packageorigin' | cut -d : -f 2) - if [ -n "$pkg_name" ]; then + pkg_name=$(${RPM} -D "_dbpath $solve" -D "__dbi_txn create nofsync" -q --qf "%{packageorigin}\n" "$@" | grep -v "is not installed" || true) + if [ -n "$pkg_name" -a "$pkg_name" != "(none)" ]; then + echo $pkg_name break; fi done - echo $pkg_name } # rpm common command and options @@ -415,9 +415,9 @@ package_install_internal_rpm () { # Now that we have a solution, pull out a list of what to install... echo "Manifest: ${target_rootfs}/install/install.manifest" - ${RPM} -D "_dbpath ${target_rootfs}/install" -qa --yaml \ + ${RPM} -D "_dbpath ${target_rootfs}/install" -qa --qf "%{packageorigin}\n" \ -D "__dbi_txn create nofsync private" \ - | grep -i 'Packageorigin' | cut -d : -f 2 > ${target_rootfs}/install/install_solution.manifest + > ${target_rootfs}/install/install_solution.manifest touch ${target_rootfs}/install/install_multilib_solution.manifest @@ -435,9 +435,9 @@ package_install_internal_rpm () { # Now that we have a solution, pull out a list of what to install... echo "Manifest: ${target_rootfs}/install/install_multilib.manifest" - ${RPM} -D "_dbpath ${target_rootfs}/install" -qa --yaml \ + ${RPM} -D "_dbpath ${target_rootfs}/install" -qa --qf "%{packageorigin}\n" \ -D "__dbi_txn create nofsync private" \ - | grep -i 'Packageorigin' | cut -d : -f 2 > ${target_rootfs}/install/install_multilib_solution.manifest + > ${target_rootfs}/install/install_multilib_solution.manifest fi @@ -492,9 +492,9 @@ EOF -U --justdb --noscripts --notriggers --noparentdirs --nolinktos --ignoresize \ ${target_rootfs}/install/initial_install.manifest - ${RPM} -D "_dbpath ${target_rootfs}/initial" -qa --yaml \ + ${RPM} -D "_dbpath ${target_rootfs}/initial" -qa --qf "%{packageorigin}\n" \ -D "__dbi_txn create nofsync private" \ - | grep -i 'Packageorigin' | cut -d : -f 2 > ${target_rootfs}/install/initial_solution.manifest + > ${target_rootfs}/install/initial_solution.manifest rpm_update_pkg ${target_rootfs}/install/initial_solution.manifest diff --git a/meta/recipes-devtools/rpm/rpm/rpm-packageorigin.patch b/meta/recipes-devtools/rpm/rpm/rpm-packageorigin.patch new file mode 100644 index 0000000000..3c6dad4d50 --- /dev/null +++ b/meta/recipes-devtools/rpm/rpm/rpm-packageorigin.patch @@ -0,0 +1,23 @@ +Add the ability to query the packageorigin + +Written by jbj at rpm5.org + +Signed-off-by: Mark Hatle <mark.hatle@windriver.com> + +Index: rpm-5.4.8/rpmdb/hdrfmt.c +=================================================================== +--- rpm-5.4.8.orig/rpmdb/hdrfmt.c ++++ rpm-5.4.8/rpmdb/hdrfmt.c +@@ -2403,8 +2403,10 @@ static int pkgoriginTag(Header h, HE_t + int rc = 1; + + he->tag = RPMTAG_PACKAGEORIGIN; +- if (!headerGet(h, he, HEADERGET_NOEXTENSION) +- && (origin = headerGetOrigin(h)) != NULL) ++ /* XXX two sources for tag data: what search precedence? */ ++ if (headerGet(h, he, HEADERGET_NOEXTENSION)) ++ rc = 0; ++ else if ((origin = headerGetOrigin(h)) != NULL) + { + he->t = RPM_STRING_TYPE; + he->p.str = xstrdup(origin); diff --git a/meta/recipes-devtools/rpm/rpm_5.4.9.bb b/meta/recipes-devtools/rpm/rpm_5.4.9.bb index 2ca0f58ff0..a38a684ff4 100644 --- a/meta/recipes-devtools/rpm/rpm_5.4.9.bb +++ b/meta/recipes-devtools/rpm/rpm_5.4.9.bb @@ -43,7 +43,7 @@ LICENSE = "LGPLv2.1" LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1" DEPENDS = "libpcre attr acl popt ossp-uuid file" -PR = "r41" +PR = "r42" # rpm2cpio is a shell script, which is part of the rpm src.rpm. It is needed # in order to extract the distribution SRPM into a format we can extract... @@ -70,6 +70,7 @@ SRC_URI = "http://www.rpm5.org/files/rpm/rpm-5.4/rpm-5.4.9-0.20120508.src.rpm;ex file://rpm-macros.patch \ file://rpm-lua.patch \ file://rpm-ossp-uuid.patch \ + file://rpm-packageorigin.patch \ " SRC_URI[md5sum] = "60d56ace884340c1b3fcac6a1d58e768" |