[OE-core] [PATCH 4/9] package_rpm: Add capability to directly query packageorigin
Giuseppe Condorelli
giuseppe.condorelli at gmail.com
Tue Jun 12 07:21:37 UTC 2012
Hi Mark,
this can be interesting for me. Please can you explain with an example what
really this patch does?
Many thanks,
Giuseppe
2012/6/11 Mark Hatle <mark.hatle at windriver.com>
> 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 at windriver.com>
> ---
> meta/classes/package_rpm.bbclass | 18 +++++++-------
> .../rpm/rpm/rpm-packageorigin.patch | 23
> ++++++++++++++++++++
> meta/recipes-devtools/rpm/rpm_5.4.9.bb | 3 +-
> 3 files changed, 34 insertions(+), 10 deletions(-)
> create mode 100644 meta/recipes-devtools/rpm/rpm/rpm-packageorigin.patch
>
> diff --git a/meta/classes/package_rpm.bbclass
> b/meta/classes/package_rpm.bbclass
> index 35928ab..097fa12 100644
> --- a/meta/classes/package_rpm.bbclass
> +++ b/meta/classes/package_rpm.bbclass
> @@ -130,12 +130,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
> @@ -401,9 +401,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
>
> @@ -421,9 +421,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
>
> @@ -478,9 +478,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 0000000..3c6dad4
> --- /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 at 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.bbb/meta/recipes-devtools/rpm/
> rpm_5.4.9.bb
> index 2ca0f58..a38a684 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"
> --
> 1.7.3.4
>
>
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20120612/64949111/attachment-0002.html>
More information about the Openembedded-core
mailing list