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 <[email protected]> > 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 <[email protected]> > --- > 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 <[email protected]> > + > +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 > [email protected] > http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core >
_______________________________________________ Openembedded-core mailing list [email protected] http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
