All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.