diff options
author | Markus Lehtonen <markus.lehtonen@linux.intel.com> | 2015-09-08 11:39:12 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-09-09 14:25:06 +0100 |
commit | 9b9733b7d74032aef4979bec553019421e77da14 (patch) | |
tree | 457be0064b602e48c06cd221280fce1ec1c60ee9 /scripts/lib/devtool/standard.py | |
parent | 0bf2e4b3edfc43e7a2e8d3387a9370d110533b7c (diff) | |
download | openembedded-core-9b9733b7d74032aef4979bec553019421e77da14.tar.gz openembedded-core-9b9733b7d74032aef4979bec553019421e77da14.tar.bz2 openembedded-core-9b9733b7d74032aef4979bec553019421e77da14.zip |
devtool: update-recipe: better 'auto' mode
Enhance the logic behind the 'auto' mode a bit by only updating the
SRCREV if the changes are already found upstream. The logic is simple:
update SRCREV only if the current local HEAD commit is found in the
remote branch (i.e. 'origin/<branch_name>'). Otherwise resort to
patching.
This affects a couple of the oe-selftest tests so update those as well.
[YOCTO #7907]
Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'scripts/lib/devtool/standard.py')
-rw-r--r-- | scripts/lib/devtool/standard.py | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/scripts/lib/devtool/standard.py b/scripts/lib/devtool/standard.py index cbc023247e..f76c632e78 100644 --- a/scripts/lib/devtool/standard.py +++ b/scripts/lib/devtool/standard.py @@ -757,6 +757,31 @@ def _update_recipe_patch(args, config, srctree, rd, config_data): _remove_patch_files(args, removepatches, destpath) +def _guess_recipe_update_mode(srctree, rdata): + """Guess the recipe update mode to use""" + src_uri = (rdata.getVar('SRC_URI', False) or '').split() + git_uris = [uri for uri in src_uri if uri.startswith('git://')] + if not git_uris: + return 'patch' + # Just use the first URI for now + uri = git_uris[0] + # Check remote branch + upstr_branch = 'master' + for paramdef in uri.split(';')[1:]: + name, value = paramdef.split('=', 1) + if name == 'branch': + upstr_branch = value + # Check if current branch HEAD is found in upstream branch + stdout, _ = bb.process.run('git rev-parse HEAD', cwd=srctree) + head_rev = stdout.rstrip() + stdout, _ = bb.process.run('git branch -r --contains %s' % head_rev, + cwd=srctree) + remote_brs = [branch.strip() for branch in stdout.splitlines()] + if 'origin/' + upstr_branch in remote_brs: + return 'srcrev' + + return 'patch' + def update_recipe(args, config, basepath, workspace): """Entry point for the devtool 'update-recipe' subcommand""" if not args.recipename in workspace: @@ -777,17 +802,12 @@ def update_recipe(args, config, basepath, workspace): if not rd: return 1 - orig_src_uri = rd.getVar('SRC_URI', False) or '' + srctree = workspace[args.recipename]['srctree'] if args.mode == 'auto': - if 'git://' in orig_src_uri: - mode = 'srcrev' - else: - mode = 'patch' + mode = _guess_recipe_update_mode(srctree, rd) else: mode = args.mode - srctree = workspace[args.recipename]['srctree'] - if mode == 'srcrev': _update_recipe_srcrev(args, srctree, rd, tinfoil.config_data) elif mode == 'patch': |