[OE-core] [PATCH] devtool: update-recipe: better 'auto' mode
Markus Lehtonen
markus.lehtonen at linux.intel.com
Tue Sep 1 14:43:21 UTC 2015
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.
[YOCTO #7907]
Signed-off-by: Markus Lehtonen <markus.lehtonen at linux.intel.com>
---
scripts/lib/devtool/standard.py | 34 +++++++++++++++++++++++++++-------
1 file changed, 27 insertions(+), 7 deletions(-)
diff --git a/scripts/lib/devtool/standard.py b/scripts/lib/devtool/standard.py
index de7afd9..6f3bb8e 100644
--- a/scripts/lib/devtool/standard.py
+++ b/scripts/lib/devtool/standard.py
@@ -725,6 +725,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:
@@ -745,17 +770,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':
--
2.1.4
More information about the Openembedded-core
mailing list