mirror of
https://git.yoctoproject.org/poky
synced 2026-05-30 00:20:08 +00:00
devtool: fix handling of BBCLASSEXTENDed recipes
If a recipe is BBCLASSEXTENDed (e.g. to -native), its PN value and the name of the bbappend will be different; we were assuming them to be the same when reading in the workspace, leading to us seeing the base recipe name everywhere afterwards. Also add a test so we ensure this doesn't regress in future. Fixes [YOCTO #8157]. (From OE-Core rev: b63fca00c2e24ad0c8b8b3c492d93ee4372fa92d) Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
48bb9eca79
commit
677e8c8e97
+6
-6
@@ -104,15 +104,15 @@ def read_workspace():
|
||||
_enable_workspace_layer(config.workspace_path, config, basepath)
|
||||
|
||||
logger.debug('Reading workspace in %s' % config.workspace_path)
|
||||
externalsrc_re = re.compile(r'^EXTERNALSRC(_pn-[^ =]+)? =.*$')
|
||||
externalsrc_re = re.compile(r'^EXTERNALSRC(_pn-([^ =]+))? *= *"([^"]*)"$')
|
||||
for fn in glob.glob(os.path.join(config.workspace_path, 'appends', '*.bbappend')):
|
||||
pn = os.path.splitext(os.path.basename(fn))[0].split('_')[0]
|
||||
with open(fn, 'r') as f:
|
||||
for line in f:
|
||||
if externalsrc_re.match(line.rstrip()):
|
||||
splitval = line.split('=', 2)
|
||||
workspace[pn] = splitval[1].strip('" \n\r\t')
|
||||
break
|
||||
res = externalsrc_re.match(line.rstrip())
|
||||
if res:
|
||||
pn = res.group(2) or os.path.splitext(os.path.basename(fn))[0].split('_')[0]
|
||||
workspace[pn] = {'srctree': res.group(3),
|
||||
'bbappend': fn}
|
||||
|
||||
def create_workspace(args, config, basepath, workspace):
|
||||
if args.layerpath:
|
||||
|
||||
@@ -430,6 +430,16 @@ def modify(args, config, basepath, workspace):
|
||||
if not rd:
|
||||
return 1
|
||||
recipefile = rd.getVar('FILE', True)
|
||||
appendname = os.path.splitext(os.path.basename(recipefile))[0]
|
||||
if args.wildcard:
|
||||
appendname = re.sub(r'_.*', '_%', appendname)
|
||||
appendpath = os.path.join(config.workspace_path, 'appends')
|
||||
appendfile = os.path.join(appendpath, appendname + '.bbappend')
|
||||
if os.path.exists(appendfile):
|
||||
raise DevtoolError("Another variant of recipe %s is already in your "
|
||||
"workspace (only one variant of a recipe can "
|
||||
"currently be worked on at once)"
|
||||
% args.recipename)
|
||||
|
||||
_check_compatible_recipe(args.recipename, rd)
|
||||
|
||||
@@ -467,14 +477,8 @@ def modify(args, config, basepath, workspace):
|
||||
srcsubdir = os.path.relpath(s, workdir).split(os.sep, 1)[1]
|
||||
srctree = os.path.join(srctree, srcsubdir)
|
||||
|
||||
appendpath = os.path.join(config.workspace_path, 'appends')
|
||||
if not os.path.exists(appendpath):
|
||||
os.makedirs(appendpath)
|
||||
|
||||
appendname = os.path.splitext(os.path.basename(recipefile))[0]
|
||||
if args.wildcard:
|
||||
appendname = re.sub(r'_.*', '_%', appendname)
|
||||
appendfile = os.path.join(appendpath, appendname + '.bbappend')
|
||||
with open(appendfile, 'w') as f:
|
||||
f.write('FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"\n\n')
|
||||
f.write('inherit externalsrc\n')
|
||||
@@ -777,7 +781,7 @@ def update_recipe(args, config, basepath, workspace):
|
||||
else:
|
||||
mode = args.mode
|
||||
|
||||
srctree = workspace[args.recipename]
|
||||
srctree = workspace[args.recipename]['srctree']
|
||||
|
||||
if mode == 'srcrev':
|
||||
_update_recipe_srcrev(args, srctree, rd, tinfoil.config_data)
|
||||
@@ -793,7 +797,7 @@ def status(args, config, basepath, workspace):
|
||||
"""Entry point for the devtool 'status' subcommand"""
|
||||
if workspace:
|
||||
for recipe, value in workspace.iteritems():
|
||||
print("%s: %s" % (recipe, value))
|
||||
print("%s: %s" % (recipe, value['srctree']))
|
||||
else:
|
||||
logger.info('No recipes currently in your workspace - you can use "devtool modify" to work on an existing recipe or "devtool add" to add a new one')
|
||||
return 0
|
||||
|
||||
Reference in New Issue
Block a user