Hi Mark, many thanks for the explanation.
Cheers, Giuseppe 2012/6/12 Mark Hatle <[email protected]> > On 6/12/12 2:21 AM, Giuseppe Condorelli wrote: > >> Hi Mark, >> this can be interesting for me. Please can you explain with an example >> what >> really this patch does? >> > > The resolver database is seeded with all of the items from the > packagefeed. When you seed (install) a database, each entry gets a record > of where the package file exists on the disk. This is stored in the > packageorigin field. It is designed to be used by resolver systems. > > Before you could only query the packageorigin field if you were using raw > RPM calls or using the --yaml export features. We wanted to be able to > query the file path from the resolver via the shell. This patch added that > ability. > > The packageorigin is likely not useful to anyone, unless you are using it > in conjunction w/ an associated package feed/resolver database. > > --Mark > > Many thanks, >> Giuseppe >> >> 2012/6/11 Mark Hatle <[email protected] <mailto: >> mark.hatle@windriver.**com <[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] >> <mailto:mark.hatle@windriver.**com <[email protected]>>> >> >> --- >> meta/classes/package_rpm.**bbclass | 18 +++++++------- >> .../rpm/rpm/rpm-packageorigin.**patch | 23 ++++++++++++++++++++ >> meta/recipes-devtools/rpm/rpm_**5.4.9.bb <http://rpm_5.4.9.bb> < >> http://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 <http://rpm5.org> >> >> + >> +Signed-off-by: Mark Hatle <[email protected] >> <mailto:mark.hatle@windriver.**com <[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/rp**m_5.4.9.bb<http://rpm_5.4.9.bb>< >> http://rpm_5.4.9.bb> >> b/meta/recipes-devtools/rpm/rp**m_5.4.9.bb <http://rpm_5.4.9.bb> < >> http://rpm_5.4.9.bb> >> index 2ca0f58..a38a684 100644 >> --- a/meta/recipes-devtools/rpm/rp**m_5.4.9.bb <http://rpm_5.4.9.bb> < >> http://rpm_5.4.9.bb> >> +++ b/meta/recipes-devtools/rpm/rp**m_5.4.9.bb <http://rpm_5.4.9.bb> < >> http://rpm_5.4.9.bb> >> >> @@ -43,7 +43,7 @@ LICENSE = "LGPLv2.1" >> LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=** >> 2d5025d4aa3495befef8f17206a5b0**a1" >> >> 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<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] = "**60d56ace884340c1b3fcac6a1d58e7**68" >> -- >> 1.7.3.4 >> >> >> ______________________________**_________________ >> Openembedded-core mailing list >> >> Openembedded-core@lists.**openembedded.org<[email protected]> >> >> <mailto:Openembedded-core@**lists.openembedded.org<[email protected]> >> > >> http://lists.linuxtogo.org/**cgi-bin/mailman/listinfo/** >> openembedded-core<http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core> >> >> >> >> >> >> ______________________________**_________________ >> Openembedded-core mailing list >> Openembedded-core@lists.**openembedded.org<[email protected]> >> http://lists.linuxtogo.org/**cgi-bin/mailman/listinfo/**openembedded-core<http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core> >> > > > ______________________________**_________________ > Openembedded-core mailing list > Openembedded-core@lists.**openembedded.org<[email protected]> > http://lists.linuxtogo.org/**cgi-bin/mailman/listinfo/**openembedded-core<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
