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]] -=-=-=-=-=-=-=-=-=-=-=-
