[bitbake-devel] [RFC PATCH 1/2] bitbake: track skipped packages
Joshua Lock
josh at linux.intel.com
Thu Jun 2 20:01:52 UTC 2011
On Wed, 2011-06-01 at 18:26 +0100, Paul Eggleton wrote:
> Add skiplist to cooker that allows access to the list of packages skipped
> via SkipPackage (this includes COMPATIBLE_MACHINE, INCOMPATIBLE_LICENSE,
> etc.) This can be used to enhance error reporting.
Neat. Minor coding style nit below.
>
> Signed-off-by: Paul Eggleton <paul.eggleton at linux.intel.com>
> ---
> bitbake/lib/bb/cache.py | 12 +++++++++---
> bitbake/lib/bb/cooker.py | 16 ++++++++++++++++
> bitbake/lib/bb/parse/ast.py | 12 ++++++------
> 3 files changed, 31 insertions(+), 9 deletions(-)
>
> diff --git a/bitbake/lib/bb/cache.py b/bitbake/lib/bb/cache.py
> index d083c51..076262b 100644
> --- a/bitbake/lib/bb/cache.py
> +++ b/bitbake/lib/bb/cache.py
> @@ -59,6 +59,7 @@ recipe_fields = (
> 'broken',
> 'not_world',
> 'skipped',
> + 'skipreason',
> 'timestamp',
> 'packages',
> 'packages_dynamic',
> @@ -128,11 +129,15 @@ class RecipeInfo(namedtuple('RecipeInfo', recipe_fields)):
>
> @classmethod
> def from_metadata(cls, filename, metadata):
> - if cls.getvar('__SKIPPED', metadata):
> + skipval = cls.getvar('__SKIPPED', metadata)
> + if skipval:
> return cls.make_optional(skipped=True,
> + skipreason=skipval,
> file_depends=metadata.getVar('__depends', False),
> timestamp=bb.parse.cached_mtime(filename),
> - variants=cls.listvar('__VARIANTS', metadata) + [''])
> + variants=cls.listvar('__VARIANTS', metadata) + [''],
> + provides=cls.depvar('PROVIDES', metadata),
> + rprovides=cls.depvar('RPROVIDES', metadata))
>
> tasks = metadata.getVar('__BBTASKS', False)
>
> @@ -152,6 +157,7 @@ class RecipeInfo(namedtuple('RecipeInfo', recipe_fields)):
> variants = cls.listvar('__VARIANTS', metadata) + [''],
>
> skipped = False,
> + skipreason = None,
> timestamp = bb.parse.cached_mtime(filename),
> packages = cls.listvar('PACKAGES', metadata),
> pn = pn,
> @@ -348,7 +354,7 @@ class Cache(object):
> cached, infos = self.load(fn, appends, cfgData)
> for virtualfn, info in infos:
> if info.skipped:
> - logger.debug(1, "Skipping %s", virtualfn)
> + logger.debug(1, "Skipping %s: %s", (virtualfn, info.skipreason) )
> skipped += 1
> else:
> self.add_info(virtualfn, info, cacheData, not cached)
> diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
> index 0b52f18..9b12e0d 100644
> --- a/bitbake/lib/bb/cooker.py
> +++ b/bitbake/lib/bb/cooker.py
> @@ -55,6 +55,20 @@ class NothingToBuild(Exception):
> class state:
> initial, parsing, running, shutdown, stop = range(5)
>
> +
> +class SkippedPackage:
> + def __init__(self, info = None, reason = None):
> + self.skipreason = None
> + self.provides = None
> + self.rprovides = None
> +
> + if info:
> + self.skipreason = info.skipreason
> + self.provides = info.provides
> + self.rprovides = info.rprovides
> + elif reason:
> + self.skipreason = reason
> +
> #============================================================================#
> # BBCooker
> #============================================================================#
> @@ -66,6 +80,7 @@ class BBCooker:
> def __init__(self, configuration, server):
> self.status = None
> self.appendlist = {}
> + self.skiplist = {}
>
> if server:
> self.server = server.BitBakeServer(self)
> @@ -1198,6 +1213,7 @@ class CookerParser(object):
> for virtualfn, info in result:
> if info.skipped:
> self.skipped += 1
> + self.cooker.skiplist[virtualfn] = SkippedPackage(info)
> self.bb_cache.add_info(virtualfn, info, self.cooker.status,
> parsed=parsed)
> return True
> diff --git a/bitbake/lib/bb/parse/ast.py b/bitbake/lib/bb/parse/ast.py
> index 375dc61..18e491c 100644
> --- a/bitbake/lib/bb/parse/ast.py
> +++ b/bitbake/lib/bb/parse/ast.py
> @@ -376,8 +376,8 @@ def multi_finalize(fn, d):
> try:
> if not onlyfinalise or "default" in onlyfinalise:
> finalize(fn, d)
> - except bb.parse.SkipPackage:
> - bb.data.setVar("__SKIPPED", True, d)
> + except bb.parse.SkipPackage as e:
> + bb.data.setVar("__SKIPPED", e.args[0], d)
> datastores = {"": safe_d}
>
> versions = (d.getVar("BBVERSIONS", True) or "").split()
> @@ -419,8 +419,8 @@ def multi_finalize(fn, d):
> verfunc(pv, d, safe_d)
> try:
> finalize(fn, d)
> - except bb.parse.SkipPackage:
> - bb.data.setVar("__SKIPPED", True, d)
> + except bb.parse.SkipPackage as e:
> + bb.data.setVar("__SKIPPED", e.args[0], d)
This doesn't seem very Pythonic. I think you should just be able to do:
bb.data.setVar("__SKIPPED", e, d)
or possibly:
bb.data.setVar("__SKIPPED", str(e), d)
I know I'm being picky but that e.args[0] stuck out like a sore thumb.
>
> _create_variants(datastores, versions, verfunc)
>
> @@ -439,8 +439,8 @@ def multi_finalize(fn, d):
> try:
> if not onlyfinalise or variant in onlyfinalise:
> finalize(fn, variant_d, variant)
> - except bb.parse.SkipPackage:
> - bb.data.setVar("__SKIPPED", True, variant_d)
> + except bb.parse.SkipPackage as e:
> + bb.data.setVar("__SKIPPED", e.args[0], variant_d)
Same as above.
>
> if len(datastores) > 1:
> variants = filter(None, datastores.iterkeys())
--
Joshua Lock
Yocto Build System Monkey
Intel Open Source Technology Centre
More information about the bitbake-devel
mailing list