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 | |
| 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')
| -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': | 
