<div dir="ltr"><div><div>Hi,<br><br></div>I don&#39;t have the env to test the patch anymore.<br><br></div><div>However, I have a question on this patch. I inline the comment in the code here, below the related lines:<br></div><div><div><div><div class="gmail_extra"><br><div class="gmail_quote">2016-01-07 21:07 GMT+01:00  <span dir="ltr">&lt;<a href="mailto:mariano.lopez@linux.intel.com" target="_blank">mariano.lopez@linux.intel.com</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">From: Mariano Lopez &lt;<a href="mailto:mariano.lopez@linux.intel.com">mariano.lopez@linux.intel.com</a>&gt;<br>
<br>
This patch changes the use list_pkgs() instead of list()<br>
from class RpmPkgsList. The change is in two functions,<br>
image_list_installed_packages from rootfs.py and<br>
sdk_list_installed_packages from sdk.py.<br>
<br>
With this change the functions calling the functions<br>
listed above, must format the output as they required.<br>
The formatting can be done using format_pkg_list() from<br>
oe.utils.<br>
<br>
The classes calling the afected functions are changed too<br>
with this patch, to keep the same functionality using the<br>
new data structure.<br>
<br>
[YOCTO #7427]<br>
<br>
Signed-off-by: Mariano Lopez &lt;<a href="mailto:mariano.lopez@linux.intel.com">mariano.lopez@linux.intel.com</a>&gt;<br>
---<br>
 meta/classes/buildhistory.bbclass        | 11 +++++++----<br>
 meta/classes/license.bbclass             |  8 ++++++--<br>
 meta/classes/populate_sdk_base.bbclass   |  8 ++++++--<br>
 meta/classes/rootfs-postcommands.bbclass |  5 +++--<br>
 meta/lib/oe/package_manager.py           | 18 ++++++++++--------<br>
 meta/lib/oe/rootfs.py                    |  8 ++++----<br>
 meta/lib/oe/sdk.py                       |  8 ++++----<br>
 7 files changed, 40 insertions(+), 26 deletions(-)<br>
<br>
diff --git a/meta/classes/buildhistory.bbclass b/meta/classes/buildhistory.bbclass<br>
index 4153e58..a2f8ac7 100644<br>
--- a/meta/classes/buildhistory.bbclass<br>
+++ b/meta/classes/buildhistory.bbclass<br>
@@ -337,18 +337,21 @@ def write_pkghistory(pkginfo, d):<br>
 def buildhistory_list_installed(d, rootfs_type=&quot;image&quot;):<br>
     from oe.rootfs import image_list_installed_packages<br>
     from oe.sdk import sdk_list_installed_packages<br>
+    from oe.utils import format_pkg_list<br>
<br>
     process_list = [(&#39;file&#39;, &#39;bh_installed_pkgs.txt&#39;),\<br>
                     (&#39;deps&#39;, &#39;bh_installed_pkgs_deps.txt&#39;)]<br>
<br>
+    if rootfs_type == &quot;image&quot;:<br>
+        pkgs = image_list_installed_packages(d)<br>
+    else:<br>
+        pkgs = sdk_list_installed_packages(d, rootfs_type == &quot;sdk_target&quot;)<br>
+<br>
     for output_type, output_file in process_list:<br>
         output_file_full = os.path.join(d.getVar(&#39;WORKDIR&#39;, True), output_file)<br>
<br>
         with open(output_file_full, &#39;w&#39;) as output:<br>
-            if rootfs_type == &quot;image&quot;:<br>
-                output.write(image_list_installed_packages(d, output_type))<br>
-            else:<br>
-                output.write(sdk_list_installed_packages(d, rootfs_type == &quot;sdk_target&quot;, output_type))<br>
+            output.write(format_pkg_list(pkgs, output_type))<br>
<br>
 python buildhistory_list_installed_image() {<br>
     buildhistory_list_installed(d)<br>
diff --git a/meta/classes/license.bbclass b/meta/classes/license.bbclass<br>
index 6651d55..fed42ca 100644<br>
--- a/meta/classes/license.bbclass<br>
+++ b/meta/classes/license.bbclass<br>
@@ -21,8 +21,12 @@ python write_package_manifest() {<br>
     license_image_dir = d.expand(&#39;${LICENSE_DIRECTORY}/${IMAGE_NAME}&#39;)<br>
     bb.utils.mkdirhier(license_image_dir)<br>
     from oe.rootfs import image_list_installed_packages<br>
+    from oe.utils import format_pkg_list<br>
+<br>
+    pkgs = image_list_installed_packages(d)<br>
+    output = format_pkg_list(pkgs)<br>
     open(os.path.join(license_image_dir, &#39;package.manifest&#39;),<br>
-        &#39;w+&#39;).write(image_list_installed_packages(d))<br>
+        &#39;w+&#39;).write(output)<br>
 }<br>
<br>
 python write_deploy_manifest() {<br>
@@ -38,7 +42,7 @@ python license_create_manifest() {<br>
         return 0<br>
<br>
     pkg_dic = {}<br>
-    for pkg in image_list_installed_packages(d).splitlines():<br>
+    for pkg in sorted(image_list_installed_packages(d)):<br>
         pkg_info = os.path.join(d.getVar(&#39;PKGDATA_DIR&#39;, True),<br>
                                 &#39;runtime-reverse&#39;, pkg)<br>
         pkg_name = os.path.basename(os.readlink(pkg_info))<br>
diff --git a/meta/classes/populate_sdk_base.bbclass b/meta/classes/populate_sdk_base.bbclass<br>
index 23dc115..26e06a5 100644<br>
--- a/meta/classes/populate_sdk_base.bbclass<br>
+++ b/meta/classes/populate_sdk_base.bbclass<br>
@@ -62,20 +62,24 @@ SDK_TARGET_MANIFEST = &quot;${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.target.manifest&quot;<br>
 SDK_HOST_MANIFEST = &quot;${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.host.manifest&quot;<br>
 python write_target_sdk_manifest () {<br>
     from oe.sdk import sdk_list_installed_packages<br>
+    from oe.utils import format_pkg_list<br>
     sdkmanifestdir = os.path.dirname(d.getVar(&quot;SDK_TARGET_MANIFEST&quot;, True))<br>
+    pkgs = sdk_list_installed_packages(d, True)<br>
     if not os.path.exists(sdkmanifestdir):<br>
         bb.utils.mkdirhier(sdkmanifestdir)<br>
     with open(d.getVar(&#39;SDK_TARGET_MANIFEST&#39;, True), &#39;w&#39;) as output:<br>
-        output.write(sdk_list_installed_packages(d, True, &#39;ver&#39;))<br>
+        output.write(format_pkg_list(pkgs, &#39;ver&#39;))<br>
 }<br>
<br>
 python write_host_sdk_manifest () {<br>
     from oe.sdk import sdk_list_installed_packages<br>
+    from oe.utils import format_pkg_list<br>
     sdkmanifestdir = os.path.dirname(d.getVar(&quot;SDK_HOST_MANIFEST&quot;, True))<br>
+    pkgs = sdk_list_installed_packages(d, False)<br>
     if not os.path.exists(sdkmanifestdir):<br>
         bb.utils.mkdirhier(sdkmanifestdir)<br>
     with open(d.getVar(&#39;SDK_HOST_MANIFEST&#39;, True), &#39;w&#39;) as output:<br>
-        output.write(sdk_list_installed_packages(d, False, &#39;ver&#39;))<br>
+        output.write(format_pkg_list(pkgs, &#39;ver&#39;))<br>
 }<br>
<br>
 POPULATE_SDK_POST_TARGET_COMMAND_append = &quot; write_target_sdk_manifest ; &quot;<br>
diff --git a/meta/classes/rootfs-postcommands.bbclass b/meta/classes/rootfs-postcommands.bbclass<br>
index 96d3051..fe664b7 100644<br>
--- a/meta/classes/rootfs-postcommands.bbclass<br>
+++ b/meta/classes/rootfs-postcommands.bbclass<br>
@@ -207,14 +207,15 @@ insert_feed_uris () {<br>
<br>
 python write_image_manifest () {<br>
     from oe.rootfs import image_list_installed_packages<br>
+    from oe.utils import format_pkg_list<br>
<br>
     deploy_dir = d.getVar(&#39;DEPLOY_DIR_IMAGE&#39;, True)<br>
     link_name = d.getVar(&#39;IMAGE_LINK_NAME&#39;, True)<br>
     manifest_name = d.getVar(&#39;IMAGE_MANIFEST&#39;, True)<br>
<br>
+    pkgs = image_list_installed_packages(d)<br>
     with open(manifest_name, &#39;w+&#39;) as image_manifest:<br>
-        image_manifest.write(image_list_installed_packages(d, &#39;ver&#39;))<br>
-        image_manifest.write(&quot;\n&quot;)<br>
+        image_manifest.write(format_pkg_list(pkgs, &quot;ver&quot;))<br>
<br></blockquote><div><br></div><div>As far as I understand from patch 2/4 in this series, you get something like &quot;pkgInfo0\npkgInfoX\npkInfoLast&quot; when using join() from inside format_pkg_list(), so you get no &quot;\n&quot; at the end of the file, and still you are also removing the line which adds the &quot;\n&quot; at the end. That would break the workaround which was added to fix bug #7427 in yocto right? Or am I missing something?<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
     if manifest_name is not None and os.path.exists(manifest_name):<br>
         manifest_link = deploy_dir + &quot;/&quot; + link_name + &quot;.manifest&quot;<br>
diff --git a/meta/lib/oe/package_manager.py b/meta/lib/oe/package_manager.py<br>
index 95e7ae7..522cbf7 100644<br>
--- a/meta/lib/oe/package_manager.py<br>
+++ b/meta/lib/oe/package_manager.py<br>
@@ -693,7 +693,7 @@ class PackageManager(object):<br>
         pass<br>
<br>
     @abstractmethod<br>
-    def list_installed(self, format=None):<br>
+    def list_installed(self):<br>
         pass<br>
<br>
     @abstractmethod<br>
@@ -713,7 +713,9 @@ class PackageManager(object):<br>
         installed_pkgs_file = os.path.join(self.d.getVar(&#39;WORKDIR&#39;, True),<br>
                                            &quot;installed_pkgs.txt&quot;)<br>
         with open(installed_pkgs_file, &quot;w+&quot;) as installed_pkgs:<br>
-            installed_pkgs.write(self.list_installed(&quot;arch&quot;))<br>
+            pkgs = self.list_installed()<br>
+            output = oe.utils.format_pkg_list(pkgs, &quot;arch&quot;)<br>
+            installed_pkgs.write(output)<br>
<br>
         if globs is None:<br>
             globs = self.d.getVar(&#39;IMAGE_INSTALL_COMPLEMENTARY&#39;, True)<br>
@@ -1417,8 +1419,8 @@ class RpmPM(PackageManager):<br>
                             self.image_rpmlib,<br>
                             symlinks=True)<br>
<br>
-    def list_installed(self, format=None):<br>
-        return self.pkgs_list.list(format)<br>
+    def list_installed(self):<br>
+        return self.pkgs_list.list_pkgs()<br>
<br>
     &#39;&#39;&#39;<br>
     If incremental install, we need to determine what we&#39;ve got,<br>
@@ -1782,8 +1784,8 @@ class OpkgPM(PackageManager):<br>
         # create the directory back, it&#39;s needed by PM lock<br>
         bb.utils.mkdirhier(self.opkg_dir)<br>
<br>
-    def list_installed(self, format=None):<br>
-        return OpkgPkgsList(self.d, self.target_rootfs, self.config_file).list(format)<br>
+    def list_installed(self):<br>
+        return OpkgPkgsList(self.d, self.target_rootfs, self.config_file).list_pkgs()<br>
<br>
     def handle_bad_recommendations(self):<br>
         bad_recommendations = self.d.getVar(&quot;BAD_RECOMMENDATIONS&quot;, True) or &quot;&quot;<br>
@@ -2166,8 +2168,8 @@ class DpkgPM(PackageManager):<br>
             bb.fatal(&quot;Cannot fix broken dependencies. Command &#39;%s&#39; &quot;<br>
                      &quot;returned %d:\n%s&quot; % (cmd, e.returncode, e.output))<br>
<br>
-    def list_installed(self, format=None):<br>
-        return DpkgPkgsList(self.d, self.target_rootfs).list()<br>
+    def list_installed(self):<br>
+        return DpkgPkgsList(self.d, self.target_rootfs).list_pkgs()<br>
<br>
<br>
 def generate_index_files(d):<br>
diff --git a/meta/lib/oe/rootfs.py b/meta/lib/oe/rootfs.py<br>
index a2af332..45a88fb 100644<br>
--- a/meta/lib/oe/rootfs.py<br>
+++ b/meta/lib/oe/rootfs.py<br>
@@ -963,17 +963,17 @@ def create_rootfs(d, manifest_dir=None):<br>
     os.environ.update(env_bkp)<br>
<br>
<br>
-def image_list_installed_packages(d, format=None, rootfs_dir=None):<br>
+def image_list_installed_packages(d, rootfs_dir=None):<br>
     if not rootfs_dir:<br>
         rootfs_dir = d.getVar(&#39;IMAGE_ROOTFS&#39;, True)<br>
<br>
     img_type = d.getVar(&#39;IMAGE_PKGTYPE&#39;, True)<br>
     if img_type == &quot;rpm&quot;:<br>
-        return RpmPkgsList(d, rootfs_dir).list(format)<br>
+        return RpmPkgsList(d, rootfs_dir).list_pkgs()<br>
     elif img_type == &quot;ipk&quot;:<br>
-        return OpkgPkgsList(d, rootfs_dir, d.getVar(&quot;IPKGCONF_TARGET&quot;, True)).list(format)<br>
+        return OpkgPkgsList(d, rootfs_dir, d.getVar(&quot;IPKGCONF_TARGET&quot;, True)).list_pkgs()<br>
     elif img_type == &quot;deb&quot;:<br>
-        return DpkgPkgsList(d, rootfs_dir).list(format)<br>
+        return DpkgPkgsList(d, rootfs_dir).list_pkgs()<br>
<br>
 if __name__ == &quot;__main__&quot;:<br>
     &quot;&quot;&quot;<br>
diff --git a/meta/lib/oe/sdk.py b/meta/lib/oe/sdk.py<br>
index 6affa40..b308aea 100644<br>
--- a/meta/lib/oe/sdk.py<br>
+++ b/meta/lib/oe/sdk.py<br>
@@ -345,7 +345,7 @@ class DpkgSdk(Sdk):<br>
<br>
<br>
<br>
-def sdk_list_installed_packages(d, target, format=None, rootfs_dir=None):<br>
+def sdk_list_installed_packages(d, target, rootfs_dir=None):<br>
     if rootfs_dir is None:<br>
         sdk_output = d.getVar(&#39;SDK_OUTPUT&#39;, True)<br>
         target_path = d.getVar(&#39;SDKTARGETSYSROOT&#39;, True).strip(&#39;/&#39;)<br>
@@ -356,12 +356,12 @@ def sdk_list_installed_packages(d, target, format=None, rootfs_dir=None):<br>
     if img_type == &quot;rpm&quot;:<br>
         arch_var = [&quot;SDK_PACKAGE_ARCHS&quot;, None][target is True]<br>
         os_var = [&quot;SDK_OS&quot;, None][target is True]<br>
-        return RpmPkgsList(d, rootfs_dir, arch_var, os_var).list(format)<br>
+        return RpmPkgsList(d, rootfs_dir, arch_var, os_var).list_pkgs()<br>
     elif img_type == &quot;ipk&quot;:<br>
         conf_file_var = [&quot;IPKGCONF_SDK&quot;, &quot;IPKGCONF_TARGET&quot;][target is True]<br>
-        return OpkgPkgsList(d, rootfs_dir, d.getVar(conf_file_var, True)).list(format)<br>
+        return OpkgPkgsList(d, rootfs_dir, d.getVar(conf_file_var, True)).list_pkgs()<br>
     elif img_type == &quot;deb&quot;:<br>
-        return DpkgPkgsList(d, rootfs_dir).list(format)<br>
+        return DpkgPkgsList(d, rootfs_dir).list_pkgs()<br>
<br>
 def populate_sdk(d, manifest_dir=None):<br>
     env_bkp = os.environ.copy()<br>
<span class=""><font color="#888888">--<br>
1.8.4.5<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.openembedded.org/mailman/listinfo/openembedded-core" rel="noreferrer" target="_blank">http://lists.openembedded.org/mailman/listinfo/openembedded-core</a><br>
</font></span></blockquote></div><br></div><div class="gmail_extra">Thanks for your time spent on this,<br></div><div class="gmail_extra">Pau<br></div></div></div></div></div>