summaryrefslogtreecommitdiffstats
path: root/bin/bitbake-layers
diff options
context:
space:
mode:
authorPaul Eggleton <paul.eggleton@linux.intel.com>2015-08-19 14:20:10 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2015-08-19 17:59:32 +0100
commite852f6cabd7489585477ab567a1afeb2252377ac (patch)
tree1763e147218470e64092106a004d7cfd20f8d5cd /bin/bitbake-layers
parentb4c45bf6c42b4d319ba868f4ce77e86c8b585818 (diff)
downloadbitbake-contrib-e852f6cabd7489585477ab567a1afeb2252377ac.tar.gz
bitbake-layers: fix mapping files to layers
bitbake-layers needs to map recipe and class files to the layer they came from within the show-recipes and show-overlayed commands. However, it turns out that mapping a file to the layer it came from is not as trivial as it might seem. To do it properly we need to match the path to an entry in BBFILES then map that to the collection name using BBFILE_PATTERN, then map that to the actual layer using variable history. If it doesn't match any entry in BBFILES, then we can fall back to BBFILE_PATTERN (to handle classes and conf files). This fixes the layer name not showing up properly in the output of the show-recipes and show-overlayed commands for recipes in layers such as meta-intel that have subdirectories in BBFILE_PATTERN. It also fixes the priority not showing up in show-layers for such layers. As part of this I've added a function to VariableHistory which for a space-separated list variable gives you a dict mapping the items added to the files in which they were added. I've also fixed bb.utils.get_file_layer() and reduced some of the duplication by using this function in bitbake-layers. Also fixes the priority not showing up for layers such as meta-intel Fixes [YOCTO #8160]. Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bin/bitbake-layers')
-rwxr-xr-xbin/bitbake-layers37
1 files changed, 16 insertions, 21 deletions
diff --git a/bin/bitbake-layers b/bin/bitbake-layers
index bd05c5f69..d6db859c3 100755
--- a/bin/bitbake-layers
+++ b/bin/bitbake-layers
@@ -62,24 +62,22 @@ class Commands():
def init_bbhandler(self, config_only = False):
if not self.bbhandler:
- self.bbhandler = bb.tinfoil.Tinfoil()
+ self.bbhandler = bb.tinfoil.Tinfoil(tracking=True)
self.bblayers = (self.bbhandler.config_data.getVar('BBLAYERS', True) or "").split()
self.bbhandler.prepare(config_only)
+ layerconfs = self.bbhandler.config_data.varhistory.get_variable_items_files('BBFILE_COLLECTIONS', self.bbhandler.config_data)
+ self.bbfile_collections = {layer: os.path.dirname(os.path.dirname(path)) for layer, path in layerconfs.iteritems()}
+
def do_show_layers(self, args):
"""show current configured layers"""
self.init_bbhandler(config_only = True)
logger.plain("%s %s %s" % ("layer".ljust(20), "path".ljust(40), "priority"))
logger.plain('=' * 74)
- for layerdir in self.bblayers:
+ for layer, _, regex, pri in self.bbhandler.cooker.recipecache.bbfile_config_priorities:
+ layerdir = self.bbfile_collections.get(layer, None)
layername = self.get_layer_name(layerdir)
- layerpri = 0
- for layer, _, regex, pri in self.bbhandler.cooker.recipecache.bbfile_config_priorities:
- if regex.match(os.path.join(layerdir, 'test')):
- layerpri = pri
- break
-
- logger.plain("%s %s %d" % (layername.ljust(20), layerdir.ljust(40), layerpri))
+ logger.plain("%s %s %d" % (layername.ljust(20), layerdir.ljust(40), pri))
def do_add_layer(self, args):
@@ -682,25 +680,22 @@ build results (as the layer priority order has effectively changed).
logger.warning("File %s does not match the flattened layer's BBFILES setting, you may need to edit conf/layer.conf or move the file elsewhere" % f1full)
def get_file_layer(self, filename):
- for layer, _, regex, _ in self.bbhandler.cooker.recipecache.bbfile_config_priorities:
- if regex.match(filename):
- for layerdir in self.bblayers:
- if regex.match(os.path.join(layerdir, 'test')) and re.match(layerdir, filename):
- return self.get_layer_name(layerdir)
- return "?"
+ layerdir = self.get_file_layerdir(filename)
+ if layerdir:
+ return self.get_layer_name(layerdir)
+ else:
+ return '?'
def get_file_layerdir(self, filename):
- for layer, _, regex, _ in self.bbhandler.cooker.recipecache.bbfile_config_priorities:
- if regex.match(filename):
- for layerdir in self.bblayers:
- if regex.match(os.path.join(layerdir, 'test')) and re.match(layerdir, filename):
- return layerdir
- return "?"
+ layer = bb.utils.get_file_layer(filename, self.bbhandler.config_data)
+ return self.bbfile_collections.get(layer, None)
def remove_layer_prefix(self, f):
"""Remove the layer_dir prefix, e.g., f = /path/to/layer_dir/foo/blah, the
return value will be: layer_dir/foo/blah"""
f_layerdir = self.get_file_layerdir(f)
+ if not f_layerdir:
+ return f
prefix = os.path.join(os.path.dirname(f_layerdir), '')
return f[len(prefix):] if f.startswith(prefix) else f