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