From fec97f6fa24f810b175feb43ef6ed0d47e73460e Mon Sep 17 00:00:00 2001 From: Paul Eggleton Date: Mon, 23 Nov 2015 10:14:44 +1300 Subject: devtool: upgrade: fix updating PV and SRCREV This code was clearly never tested. Fix the following issues: * Actually set SRCREV if it's been specified * Enable history tracking and reparse so that we handle if variables are set in an inc file next to the recipe * Use a more accurate check for PV being in the recipe which will work if it's in an inc file next to the recipe (From OE-Core master rev: 8b8f04226ebf464fa61c05ca7af7c6cbda392339) (From OE-Core rev: 105a7c90dac6f43b7c3d1de92827db2db8419112) Signed-off-by: Paul Eggleton Signed-off-by: Ross Burton Signed-off-by: Richard Purdie --- scripts/lib/devtool/upgrade.py | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/scripts/lib/devtool/upgrade.py b/scripts/lib/devtool/upgrade.py index d38762373e..ace0b76be0 100644 --- a/scripts/lib/devtool/upgrade.py +++ b/scripts/lib/devtool/upgrade.py @@ -91,15 +91,13 @@ def _remove_patch_dirs(recipefolder): for d in dirs: shutil.rmtree(os.path.join(root,d)) -def _recipe_contains(rf, var): - import re - found = False - with open(rf) as f: - for line in f: - if re.match("^%s.*=.*" % var, line): - found = True - break - return found +def _recipe_contains(rd, var): + rf = rd.getVar('FILE', True) + varfiles = oe.recipeutils.get_var_files(rf, [var], rd) + for var, fn in varfiles.iteritems(): + if fn and fn.startswith(os.path.dirname(rf) + os.sep): + return True + return False def _rename_recipe_dirs(oldpv, newpv, path): for root, dirs, files in os.walk(path): @@ -257,7 +255,7 @@ def _extract_new_source(newpv, srctree, no_patch, srcrev, branch, keep_temp, tin return (rev, md5, sha256) -def _create_new_recipe(newpv, md5, sha256, workspace, rd): +def _create_new_recipe(newpv, md5, sha256, srcrev, workspace, tinfoil, rd): """Creates the new recipe under workspace""" crd = rd.createCopy() @@ -271,8 +269,16 @@ def _create_new_recipe(newpv, md5, sha256, workspace, rd): newpv = oldpv fullpath = _rename_recipe_files(bpn, oldpv, newpv, path) - if _recipe_contains(fullpath, 'PV') and newpv != oldpv: - oe.recipeutils.patch_recipe(d, fullpath, {'PV':newpv}) + newvalues = {} + if _recipe_contains(rd, 'PV') and newpv != oldpv: + newvalues['PV'] = newpv + + if srcrev: + newvalues['SRCREV'] = srcrev + + if newvalues: + rd = oe.recipeutils.parse_recipe(fullpath, None, tinfoil.config_data) + oe.recipeutils.patch_recipe(rd, fullpath, newvalues) if md5 and sha256: # Unfortunately, oe.recipeutils.patch_recipe cannot update flags. @@ -294,7 +300,7 @@ def upgrade(args, config, basepath, workspace): if reason: raise DevtoolError(reason) - tinfoil = setup_tinfoil(basepath=basepath) + tinfoil = setup_tinfoil(basepath=basepath, tracking=True) rd = parse_recipe(config, tinfoil, args.recipename, True) if not rd: @@ -316,7 +322,7 @@ def upgrade(args, config, basepath, workspace): rev2, md5, sha256 = _extract_new_source(args.version, args.srctree, args.no_patch, args.srcrev, args.branch, args.keep_temp, tinfoil, rd) - rf = _create_new_recipe(args.version, md5, sha256, config.workspace_path, rd) + rf = _create_new_recipe(args.version, md5, sha256, args.srcrev, config.workspace_path, tinfoil, rd) except bb.process.CmdError as e: _upgrade_error(e, rf, args.srctree) except DevtoolError as e: -- cgit v1.2.3-54-g00ecf