[OE-core] [PATCH 3/4] lib/oe/rootfs: Use list_pkgs() instead of list()

Mariano Lopez mariano.lopez at linux.intel.com
Mon Jan 11 20:14:15 UTC 2016



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 <mariano.lopez at linux.intel.com 
> <mailto:mariano.lopez at linux.intel.com>>:
>
>     From: Mariano Lopez <mariano.lopez at linux.intel.com
>     <mailto:mariano.lopez at linux.intel.com>>
>
>     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 <mariano.lopez at linux.intel.com
>     <mailto:mariano.lopez at linux.intel.com>>
>     ---
>      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 at lists.openembedded.org
>     <mailto:Openembedded-core at lists.openembedded.org>
>     http://lists.openembedded.org/mailman/listinfo/openembedded-core
>
>
> Thanks for your time spent on this,
> Pau

-- 
Mariano Lopez
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20160111/4f3e3a87/attachment-0002.html>


More information about the Openembedded-core mailing list