Openembedded Core Discussions
 help / color / mirror / Atom feed
From: Hongxu Jia <hongxu.jia@windriver.com>
To: <openembedded-core@lists.openembedded.org>
Subject: Re: [PATCH 1/5] manifest.py: add create_full for OpkgManifest class
Date: Fri, 21 Feb 2014 15:28:21 +0800	[thread overview]
Message-ID: <53070015.5090405@windriver.com> (raw)
In-Reply-To: <6054018911213afc476711fd9e9f8a08cd5f33ea.1392963956.git.hongxu.jia@windriver.com>

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.jia@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):



  reply	other threads:[~2014-02-21  7:28 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-21  6:38 [PATCH V3 0/5] manifest.py/package_manager.py/rootfs.py: support ipk incremental image generation Hongxu Jia
2014-02-21  6:38 ` [PATCH 1/5] manifest.py: add create_full for OpkgManifest class Hongxu Jia
2014-02-21  7:28   ` Hongxu Jia [this message]
2014-02-21  6:38 ` [PATCH 2/5] package_manager.py: support ipk incremental image generation Hongxu Jia
2014-02-21  6:38 ` [PATCH 3/5] rootfs.py: " Hongxu Jia
2014-02-21  6:38 ` [PATCH 4/5] rootfs.py: support BAD_RECOMMENDATIONS for " Hongxu Jia
2014-02-21  6:38 ` [PATCH 5/5] rootfs.py: tweak _multilib_sanity_test " Hongxu Jia
2014-02-21  8:24 ` [PATCH V3 0/5] manifest.py/package_manager.py/rootfs.py: support " Laurentiu Palcu
  -- strict thread matches above, loose matches on Subject: below --
2014-02-20  7:06 [PATCH V2 " Hongxu Jia
2014-02-20  7:06 ` [PATCH 1/5] manifest.py: add create_full for OpkgManifest class Hongxu Jia
2014-02-20 15:21   ` Laurentiu Palcu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=53070015.5090405@windriver.com \
    --to=hongxu.jia@windriver.com \
    --cc=openembedded-core@lists.openembedded.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox