From f4de8399ba6ddc38656cc1fb08098e7c4588151f Mon Sep 17 00:00:00 2001 From: Hongxu Jia Date: Fri, 21 Feb 2014 14:10:17 +0800 Subject: manifest.py: add create_full for OpkgManifest class The function create_full creates the manifest after the package in initial manifest has been dummy installed. It lists all *to be installed* packages. There is no real installation, just a test. [YOCTO #1894] (From OE-Core rev: 494adecd878496c2edc663ba09a456a9735d8252) Signed-off-by: Hongxu Jia Signed-off-by: Richard Purdie --- meta/lib/oe/manifest.py | 57 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/meta/lib/oe/manifest.py b/meta/lib/oe/manifest.py index a4bc04b4f2..60c788ef06 100644 --- a/meta/lib/oe/manifest.py +++ b/meta/lib/oe/manifest.py @@ -1,6 +1,8 @@ from abc import ABCMeta, abstractmethod +from oe.package_manager import * import os import re +import bb class Manifest(object): @@ -69,6 +71,7 @@ class Manifest(object): self.initial_manifest = os.path.join(self.manifest_dir, "%s_initial_manifest" % manifest_type) self.final_manifest = os.path.join(self.manifest_dir, "%s_final_manifest" % manifest_type) + self.full_manifest = os.path.join(self.manifest_dir, "%s_full_manifest" % manifest_type) # packages in the following vars will be split in 'must install' and # 'multilib' @@ -127,6 +130,15 @@ class Manifest(object): def create_final(self): pass + """ + This creates the manifest after the package in initial manifest has been + dummy installed. It lists all *to be installed* packages. There is no real + installation, just a test. + """ + @abstractmethod + def create_full(self, pm): + pass + """ The following function parses an initial manifest and returns a dictionary object with the must install, attempt only, multilib and language packages. @@ -158,6 +170,22 @@ class Manifest(object): return pkgs + ''' + This following function parses a full manifest and return a list + object with packages. + ''' + def parse_full_manifest(self): + installed_pkgs = list() + if not os.path.exists(self.full_manifest): + bb.note('full manifest not exist') + return installed_pkgs + + with open(self.full_manifest, 'r') as manifest: + for pkg in manifest.read().split('\n'): + installed_pkgs.append(pkg.strip()) + + return installed_pkgs + class RpmManifest(Manifest): """ @@ -202,10 +230,12 @@ class RpmManifest(Manifest): for pkg in pkgs[pkg_type].split(): manifest.write("%s,%s\n" % (pkg_type, pkg)) - def create_final(self): pass + def create_full(self, pm): + pass + class OpkgManifest(Manifest): """ @@ -253,6 +283,28 @@ class OpkgManifest(Manifest): def create_final(self): pass + def create_full(self, pm): + if not os.path.exists(self.initial_manifest): + self.create_initial() + + initial_manifest = self.parse_initial_manifest() + pkgs_to_install = list() + for pkg_type in initial_manifest: + pkgs_to_install += initial_manifest[pkg_type] + if len(pkgs_to_install) == 0: + return + + output = pm.dummy_install(pkgs_to_install) + + with open(self.full_manifest, 'w+') as manifest: + pkg_re = re.compile('^Installing ([^ ]+) [^ ].*') + for line in set(output.split('\n')): + m = pkg_re.match(line) + if m: + manifest.write(m.group(1) + '\n') + + return + class DpkgManifest(Manifest): def create_initial(self): @@ -272,6 +324,9 @@ class DpkgManifest(Manifest): def create_final(self): pass + def create_full(self, pm): + pass + def create_manifest(d, final_manifest=False, manifest_dir=None, manifest_type=Manifest.MANIFEST_TYPE_IMAGE): -- cgit v1.2.3-54-g00ecf