<div>Hi Mark,</div><div> </div><div>this can be interesting for me. Please can you explain with an example what really this patch does?</div><div>Many thanks,</div><div>Giuseppe<br><br></div><div class="gmail_quote">2012/6/11 Mark Hatle <span dir="ltr">&lt;<a href="mailto:mark.hatle@windriver.com" target="_blank">mark.hatle@windriver.com</a>&gt;</span><br>
<blockquote style="margin:0px 0px 0px 0.8ex;padding-left:1ex;border-left-color:rgb(204,204,204);border-left-width:1px;border-left-style:solid" class="gmail_quote">Add functionality to RPM to directly query the packageorigin (path) from<br>

the resolver database, instead of having to do this via an indirect method.<br>
<br>
This results in a minor performance improvement.<br>
<br>
Signed-off-by: Mark Hatle &lt;<a href="mailto:mark.hatle@windriver.com">mark.hatle@windriver.com</a>&gt;<br>
---<br>
 meta/classes/package_rpm.bbclass                   |   18 +++++++-------<br>
 .../rpm/rpm/rpm-packageorigin.patch                |   23 ++++++++++++++++++++<br>
 meta/recipes-devtools/rpm/<a href="http://rpm_5.4.9.bb" target="_blank">rpm_5.4.9.bb</a>             |    3 +-<br>
 3 files changed, 34 insertions(+), 10 deletions(-)<br>
 create mode 100644 meta/recipes-devtools/rpm/rpm/rpm-packageorigin.patch<br>
<br>
diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass<br>
index 35928ab..097fa12 100644<br>
--- a/meta/classes/package_rpm.bbclass<br>
+++ b/meta/classes/package_rpm.bbclass<br>
@@ -130,12 +130,12 @@ resolve_package_rpm () {<br>
        shift<br>
        local pkg_name=&quot;&quot;<br>
        for solve in `cat ${conffile}`; do<br>
-               pkg_name=$(${RPM} -D &quot;_dbpath $solve&quot; -D &quot;__dbi_txn create nofsync&quot; -q --yaml $@ | grep -i &#39;Packageorigin&#39; | cut -d : -f 2)<br>
-               if [ -n &quot;$pkg_name&quot; ]; then<br>
+               pkg_name=$(${RPM} -D &quot;_dbpath $solve&quot; -D &quot;__dbi_txn create nofsync&quot; -q --qf &quot;%{packageorigin}\n&quot; &quot;$@&quot; | grep -v &quot;is not installed&quot; || true)<br>
+               if [ -n &quot;$pkg_name&quot; -a &quot;$pkg_name&quot; != &quot;(none)&quot; ]; then<br>
+                       echo $pkg_name<br>
                        break;<br>
                fi<br>
        done<br>
-       echo $pkg_name<br>
 }<br>
<br>
 # rpm common command and options<br>
@@ -401,9 +401,9 @@ package_install_internal_rpm () {<br>
<br>
        # Now that we have a solution, pull out a list of what to install...<br>
        echo &quot;Manifest: ${target_rootfs}/install/install.manifest&quot;<br>
-       ${RPM} -D &quot;_dbpath ${target_rootfs}/install&quot; -qa --yaml \<br>
+       ${RPM} -D &quot;_dbpath ${target_rootfs}/install&quot; -qa --qf &quot;%{packageorigin}\n&quot; \<br>
                -D &quot;__dbi_txn create nofsync private&quot; \<br>
-               | grep -i &#39;Packageorigin&#39; | cut -d : -f 2 &gt; ${target_rootfs}/install/install_solution.manifest<br>
+               &gt; ${target_rootfs}/install/install_solution.manifest<br>
<br>
        touch ${target_rootfs}/install/install_multilib_solution.manifest<br>
<br>
@@ -421,9 +421,9 @@ package_install_internal_rpm () {<br>
<br>
                # Now that we have a solution, pull out a list of what to install...<br>
                echo &quot;Manifest: ${target_rootfs}/install/install_multilib.manifest&quot;<br>
-               ${RPM} -D &quot;_dbpath ${target_rootfs}/install&quot; -qa --yaml \<br>
+               ${RPM} -D &quot;_dbpath ${target_rootfs}/install&quot; -qa --qf &quot;%{packageorigin}\n&quot; \<br>
                        -D &quot;__dbi_txn create nofsync private&quot; \<br>
-                       | grep -i &#39;Packageorigin&#39; | cut -d : -f 2 &gt; ${target_rootfs}/install/install_multilib_solution.manifest<br>
+                       &gt; ${target_rootfs}/install/install_multilib_solution.manifest<br>
<br>
        fi<br>
<br>
@@ -478,9 +478,9 @@ EOF<br>
                        -U --justdb --noscripts --notriggers --noparentdirs --nolinktos --ignoresize \<br>
                        ${target_rootfs}/install/initial_install.manifest<br>
<br>
-               ${RPM} -D &quot;_dbpath ${target_rootfs}/initial&quot; -qa --yaml \<br>
+               ${RPM} -D &quot;_dbpath ${target_rootfs}/initial&quot; -qa --qf &quot;%{packageorigin}\n&quot; \<br>
                        -D &quot;__dbi_txn create nofsync private&quot; \<br>
-                       | grep -i &#39;Packageorigin&#39; | cut -d : -f 2 &gt; ${target_rootfs}/install/initial_solution.manifest<br>
+                       &gt; ${target_rootfs}/install/initial_solution.manifest<br>
<br>
                rpm_update_pkg ${target_rootfs}/install/initial_solution.manifest<br>
<br>
diff --git a/meta/recipes-devtools/rpm/rpm/rpm-packageorigin.patch b/meta/recipes-devtools/rpm/rpm/rpm-packageorigin.patch<br>
new file mode 100644<br>
index 0000000..3c6dad4<br>
--- /dev/null<br>
+++ b/meta/recipes-devtools/rpm/rpm/rpm-packageorigin.patch<br>
@@ -0,0 +1,23 @@<br>
+Add the ability to query the packageorigin<br>
+<br>
+Written by jbj at <a href="http://rpm5.org" target="_blank">rpm5.org</a><br>
+<br>
+Signed-off-by: Mark Hatle &lt;<a href="mailto:mark.hatle@windriver.com">mark.hatle@windriver.com</a>&gt;<br>
+<br>
+Index: rpm-5.4.8/rpmdb/hdrfmt.c<br>
+===================================================================<br>
+--- rpm-5.4.8.orig/rpmdb/hdrfmt.c<br>
++++ rpm-5.4.8/rpmdb/hdrfmt.c<br>
+@@ -2403,8 +2403,10 @@ static int pkgoriginTag(Header h, HE_t<br>
+     int rc = 1;<br>
+<br>
+     he-&gt;tag = RPMTAG_PACKAGEORIGIN;<br>
+-    if (!headerGet(h, he, HEADERGET_NOEXTENSION)<br>
+-     &amp;&amp; (origin = headerGetOrigin(h)) != NULL)<br>
++    /* XXX two sources for tag data: what search precedence? */<br>
++    if (headerGet(h, he, HEADERGET_NOEXTENSION))<br>
++      rc = 0;<br>
++    else if ((origin = headerGetOrigin(h)) != NULL)<br>
+     {<br>
+       he-&gt;t = RPM_STRING_TYPE;<br>
+       he-&gt;p.str = xstrdup(origin);<br>
diff --git a/meta/recipes-devtools/rpm/<a href="http://rpm_5.4.9.bb" target="_blank">rpm_5.4.9.bb</a> b/meta/recipes-devtools/rpm/<a href="http://rpm_5.4.9.bb" target="_blank">rpm_5.4.9.bb</a><br>
index 2ca0f58..a38a684 100644<br>
--- a/meta/recipes-devtools/rpm/<a href="http://rpm_5.4.9.bb" target="_blank">rpm_5.4.9.bb</a><br>
+++ b/meta/recipes-devtools/rpm/<a href="http://rpm_5.4.9.bb" target="_blank">rpm_5.4.9.bb</a><br>
@@ -43,7 +43,7 @@ LICENSE = &quot;LGPLv2.1&quot;<br>
 LIC_FILES_CHKSUM = &quot;file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1&quot;<br>
<br>
 DEPENDS = &quot;libpcre attr acl popt ossp-uuid file&quot;<br>
-PR = &quot;r41&quot;<br>
+PR = &quot;r42&quot;<br>
<br>
 # rpm2cpio is a shell script, which is part of the rpm src.rpm.  It is needed<br>
 # in order to extract the distribution SRPM into a format we can extract...<br>
@@ -70,6 +70,7 @@ SRC_URI = &quot;<a href="http://www.rpm5.org/files/rpm/rpm-5.4/rpm-5.4.9-0.20120508.src.rpm;ex" target="_blank">http://www.rpm5.org/files/rpm/rpm-5.4/rpm-5.4.9-0.20120508.src.rpm;ex</a><br>
           file://rpm-macros.patch \<br>
           file://rpm-lua.patch \<br>
           file://rpm-ossp-uuid.patch \<br>
+          file://rpm-packageorigin.patch \<br>
          &quot;<br>
<br>
 SRC_URI[md5sum] = &quot;60d56ace884340c1b3fcac6a1d58e768&quot;<br>
<span class="HOEnZb"><font color="#888888">--<br>
1.7.3.4<br>
<br>
<br>
_______________________________________________<br>
Openembedded-core mailing list<br>
<a href="mailto:Openembedded-core@lists.openembedded.org">Openembedded-core@lists.openembedded.org</a><br>
<a href="http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core" target="_blank">http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core</a><br>
</font></span></blockquote></div><br>