On Thu, 25 Jun 2020 at 11:22, Fredrik Gustafsson
<[email protected]> wrote:
>
> Decide which manifest we should load in run time without any hard coded
> values but look at which package type that is used.
>
> Signed-off-by: Fredrik Gustafsson <[email protected]>
> ---
>  meta/lib/oe/manifest.py                      | 10 ++------
>  meta/lib/oe/package_managers/deb/manifest.py |  2 +-
>  meta/lib/oe/package_managers/ipk/manifest.py |  2 +-
>  meta/lib/oe/package_managers/rpm/manifest.py |  2 +-
>  meta/lib/oe/rootfs.py                        | 13 +++++-----
>  meta/lib/oe/sdk.py                           | 27 +++++++-------------
>  6 files changed, 20 insertions(+), 36 deletions(-)
>
> diff --git a/meta/lib/oe/manifest.py b/meta/lib/oe/manifest.py
> index d93edfcac5..a8d14244c0 100644
> --- a/meta/lib/oe/manifest.py
> +++ b/meta/lib/oe/manifest.py
> @@ -190,14 +190,8 @@ class Manifest(object, metaclass=ABCMeta):
>
>  def create_manifest(d, final_manifest=False, manifest_dir=None,
>                      manifest_type=Manifest.MANIFEST_TYPE_IMAGE):
> -    from oe.package_managers.rpm.manifest import RpmManifest
> -    from oe.package_managers.ipk.manifest import OpkgManifest
> -    from oe.package_managers.deb.manifest import DpkgManifest
> -    manifest_map = {'rpm': RpmManifest,
> -                    'ipk': OpkgManifest,
> -                    'deb': DpkgManifest}
> -
> -    manifest = manifest_map[d.getVar('IMAGE_PKGTYPE')](d, manifest_dir, 
> manifest_type)
> +    import importlib
> +    manifest = importlib.import_module('oe.package_managers.' + 
> d.getVar('IMAGE_PKGTYPE') + '.manifest').PkgManifest(d, manifest_dir, 
> manifest_type)
>
>      if final_manifest:
>          manifest.create_final()
> diff --git a/meta/lib/oe/package_managers/deb/manifest.py 
> b/meta/lib/oe/package_managers/deb/manifest.py
> index 9b186555dc..5daf709e6c 100644
> --- a/meta/lib/oe/package_managers/deb/manifest.py
> +++ b/meta/lib/oe/package_managers/deb/manifest.py
> @@ -4,7 +4,7 @@
>
>  from oe.manifest import *
>
> -class DpkgManifest(Manifest):
> +class PkgManifest(Manifest):
>      def create_initial(self):
>          with open(self.initial_manifest, "w+") as manifest:
>              manifest.write(self.initial_manifest_file_header)
> diff --git a/meta/lib/oe/package_managers/ipk/manifest.py 
> b/meta/lib/oe/package_managers/ipk/manifest.py
> index be87f3d1b7..cf3097224f 100644
> --- a/meta/lib/oe/package_managers/ipk/manifest.py
> +++ b/meta/lib/oe/package_managers/ipk/manifest.py
> @@ -4,7 +4,7 @@
>
>  from oe.manifest import *
>
> -class OpkgManifest(Manifest):
> +class PkgManifest(Manifest):
>      """
>      Returns a dictionary object with mip and mlp packages.
>      """
> diff --git a/meta/lib/oe/package_managers/rpm/manifest.py 
> b/meta/lib/oe/package_managers/rpm/manifest.py
> index a225ee7a23..801e50e8b6 100644
> --- a/meta/lib/oe/package_managers/rpm/manifest.py
> +++ b/meta/lib/oe/package_managers/rpm/manifest.py
> @@ -4,7 +4,7 @@
>
>  from oe.manifest import *
>
> -class RpmManifest(Manifest):
> +class PkgManifest(Manifest):
>      """
>      Returns a dictionary object with mip and mlp packages.
>      """
> diff --git a/meta/lib/oe/rootfs.py b/meta/lib/oe/rootfs.py
> index ab10edfec0..c3cfb58493 100644
> --- a/meta/lib/oe/rootfs.py
> +++ b/meta/lib/oe/rootfs.py
> @@ -12,7 +12,6 @@ import os
>  import subprocess
>  import re
>
> -
>  class Rootfs(object, metaclass=ABCMeta):
>      """
>      This is an abstract class. Do not instantiate this directly.
> @@ -359,8 +358,8 @@ class RpmRootfs(Rootfs):
>          self.log_check_regex = r'(unpacking of archive failed|Cannot find 
> package'\
>                                 r'|exit 1|ERROR: |Error: |Error |ERROR '\
>                                 r'|Failed |Failed: |Failed$|Failed\(\d+\):)'
> -        from oe.package_managers.rpm.manifest import RpmManifest
> -        self.manifest = RpmManifest(d, manifest_dir)
> +        import importlib
> +        self.manifest = 
> importlib.import_module('oe.package_managers.rpm.manifest').PkgManifest(d, 
> manifest_dir)
>
>          self.pm = RpmPM(d,
>                          d.getVar('IMAGE_ROOTFS'),
> @@ -614,8 +613,8 @@ class DpkgRootfs(DpkgOpkgRootfs):
>
>          bb.utils.remove(self.image_rootfs, True)
>          bb.utils.remove(self.d.getVar('MULTILIB_TEMP_ROOTFS'), True)
> -        from oe.package_managers.deb.manifest import DpkgManifest
> -        self.manifest = DpkgManifest(d, manifest_dir)
> +        import importlib
> +        self.manifest = 
> importlib.import_module('oe.package_managers.deb.manifest').PkgManifest(d, 
> manifest_dir)
>          self.pm = DpkgPM(d, d.getVar('IMAGE_ROOTFS'),
>                           d.getVar('PACKAGE_ARCHS'),
>                           d.getVar('DPKG_ARCH'))
> @@ -699,8 +698,8 @@ class OpkgRootfs(DpkgOpkgRootfs):
>          super(OpkgRootfs, self).__init__(d, progress_reporter, logcatcher)
>          self.log_check_regex = '(exit 1|Collected errors)'
>
> -        from oe.package_managers.ipk.manifest import OpkgManifest
> -        self.manifest = OpkgManifest(d, manifest_dir)
> +        import importlib
> +        self.manifest = 
> importlib.import_module('oe.package_managers.ipk.manifest').PkgManifest(d, 
> manifest_dir)
>          self.opkg_conf = self.d.getVar("IPKGCONF_TARGET")
>          self.pkg_archs = self.d.getVar("ALL_MULTILIB_PACKAGE_ARCHS")
>
> diff --git a/meta/lib/oe/sdk.py b/meta/lib/oe/sdk.py
> index 70451a0b3a..18f6c16bd2 100644
> --- a/meta/lib/oe/sdk.py
> +++ b/meta/lib/oe/sdk.py
> @@ -114,11 +114,9 @@ class RpmSdk(Sdk):
>      def __init__(self, d, manifest_dir=None, rpm_workdir="oe-sdk-repo"):
>          super(RpmSdk, self).__init__(d, manifest_dir)
>
> -        from oe.package_managers.rpm.manifest import RpmManifest
> -        self.target_manifest = RpmManifest(d, self.manifest_dir,
> -                                           Manifest.MANIFEST_TYPE_SDK_TARGET)
> -        self.host_manifest = RpmManifest(d, self.manifest_dir,
> -                                         Manifest.MANIFEST_TYPE_SDK_HOST)
> +        import importlib
> +        self.target_manifest = 
> importlib.import_module('oe.package_managers.rpm.manifest').PkgManifest(d, 
> self.manifest_dir, Manifest.MANIFEST_TYPE_SDK_TARGET)
> +        self.host_manifest = 
> importlib.import_module('oe.package_managers.rpm.manifest').PkgManifest(d, 
> self.manifest_dir, Manifest.MANIFEST_TYPE_SDK_HOST)
>
>          rpm_repo_workdir = "oe-sdk-repo"
>          if "sdk_ext" in d.getVar("BB_RUNTASK"):
> @@ -232,14 +230,9 @@ class OpkgSdk(Sdk):
>          if "sdk_ext" in d.getVar("BB_RUNTASK"):
>              ipk_repo_workdir = "oe-sdk-ext-repo"
>
> -        from oe.package_managers.ipk.manifest import OpkgManifest
> -        self.target_pm = OpkgPM(d, self.sdk_target_sysroot, self.target_conf,
> -                                self.d.getVar("ALL_MULTILIB_PACKAGE_ARCHS"),
> -                                ipk_repo_workdir=ipk_repo_workdir)
> -
> -        self.host_pm = OpkgPM(d, self.sdk_host_sysroot, self.host_conf,
> -                              self.d.getVar("SDK_PACKAGE_ARCHS"),
> -                                ipk_repo_workdir=ipk_repo_workdir)
> +        import importlib
> +        self.target_manifest = 
> importlib.import_module('oe.package_managers.ipk.manifest').PkgManifest(d, 
> self.sdk_target_sysroot, self.target_conf, 
> self.d.getVar("ALL_MULTILIB_PACKAGE_ARCHS"), 
> ipk_repo_workdir=ipk_repo_workdir)
> +        self.host_manifest = 
> importlib.import_module('oe.package_managers.ipk.manifest').PkgManifest(d, 
> self.sdk_host_sysroot, self.host_conf, self.d.getVar("SDK_PACKAGE_ARCHS"), 
> ipk_repo_workdir=ipk_repo_workdir)
>
>      def _populate_sysroot(self, pm, manifest):
>          pkgs_to_install = manifest.parse_initial_manifest()
> @@ -310,11 +303,9 @@ class DpkgSdk(Sdk):
>          self.target_conf_dir = os.path.join(self.d.getVar("APTCONF_TARGET"), 
> "apt")
>          self.host_conf_dir = os.path.join(self.d.getVar("APTCONF_TARGET"), 
> "apt-sdk")
>
> -        from oe.package_managers.deb.manifest import DpkgManifest
> -        self.target_manifest = DpkgManifest(d, self.manifest_dir,
> -                                            
> Manifest.MANIFEST_TYPE_SDK_TARGET)
> -        self.host_manifest = DpkgManifest(d, self.manifest_dir,
> -                                          Manifest.MANIFEST_TYPE_SDK_HOST)
> +        import importlib
> +        self.target_manifest = 
> importlib.import_module('oe.package_managers.deb.manifest').PkgManifest(d, 
> self.manifest_dir, Manifest.MANIFEST_TYPE_SDK_TARGET)
> +        self.host_manifest = 
> importlib.import_module('oe.package_managers.deb.manifest').PkgManifest(d, 
> self.manifest_dir, Manifest.MANIFEST_TYPE_SDK_HOST)
>
>          deb_repo_workdir = "oe-sdk-repo"
>          if "sdk_ext" in d.getVar("BB_RUNTASK"):
> --
> 2.20.1

This is a functional change rather than just moving code. I recommend
the first patch series here just moves the relevant code and adds
additional imports, redirection, etc as needed. Once that's reviewed
and merged then we can look at a follow up series to make things more
dynamic and support package managers being added by other layers.

Mixing the functional changes and the code moves in a single series
makes review & testing difficult.

I also think we'd need a test case for this. Perhaps a dummy package
manager can be added in the meta-selftest layer and a selftest case
can confirm that this is loaded.


--
Paul Barker
Konsulko Group
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.

View/Reply Online (#139941): 
https://lists.openembedded.org/g/openembedded-core/message/139941
Mute This Topic: https://lists.openembedded.org/mt/75099999/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub  
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to