On 02/21/2014 02:38 PM, Hongxu Jia wrote:
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]
Signed-off-by: Hongxu Jia <hongxu....@windriver.com>
---
  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 a4bc04b..60c788e 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 *

The import  oe.package_manager line is redundant, we should remove it.

I will update this git branch to remove it, not send another patch.

//Hongxu

  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'
@@ -128,6 +131,15 @@ class Manifest(object):
          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):

_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to