Message ID | 20200625102145.7139-7-fredrigu@axis.com |
---|---|
State | New |
Headers | show |
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"):
On Thu, 25 Jun 2020 at 11:22, Fredrik Gustafsson <fredrik.gustafsson@axis.com> 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 <fredrigu@axis.com> > --- > 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/3617530 Group Owner: openembedded-core+owner@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [oe-patchwork@oe-patch.openembedded.org] -=-=-=-=-=-=-=-=-=-=-=-
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 <fredrigu@axis.com> --- 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(-)