[OE-core] [meta-oe][PATCH] devtool: add sync command
Paul Eggleton
paul.eggleton at linux.intel.com
Mon Oct 26 09:20:37 UTC 2015
Hi Tzu-Jung,
Thanks for the patch.
On Wednesday 21 October 2015 23:06:45 Tzu-Jung Lee wrote:
> The sync command is similar to the extract command, except it
> fetches the sync'ed and patched branch to an existing git repository.
>
> This enables users to keep track the upstream development while
> maintaining their own local git repository at the same time.
>
> Signed-off-by: Tzu-Jung Lee <roylee17 at currantlabs.com>
> ---
> scripts/lib/devtool/standard.py | 73
> +++++++++++++++++++++++++++++++---------- 1 file changed, 56 insertions(+),
> 17 deletions(-)
>
> diff --git a/scripts/lib/devtool/standard.py
> b/scripts/lib/devtool/standard.py index 5d7e903..2c6b7b3 100644
> --- a/scripts/lib/devtool/standard.py
> +++ b/scripts/lib/devtool/standard.py
> @@ -234,7 +234,29 @@ def extract(args, config, basepath, workspace):
> return 1
>
> srctree = os.path.abspath(args.srctree)
> - initial_rev = _extract_source(srctree, args.keep_temp, args.branch, rd)
> + initial_rev = _extract_source(srctree, args.keep_temp, args.branch,
> False, rd)
> + logger.info('Source tree extracted to %s' % srctree)
> +
> + if initial_rev:
> + return 0
> + else:
> + return 1
Hmm, so your patch shows this check being added but it's there in master. Are
you patching an older version?
> +def sync(args, config, basepath, workspace):
> + """Entry point for the devtool 'sync' subcommand"""
> + import bb
> +
> + tinfoil = _prep_extract_operation(config, basepath, args.recipename)
> + if not tinfoil:
> + # Error already shown
> + return 1
> +
> + rd = parse_recipe(config, tinfoil, args.recipename, True)
> + if not rd:
> + return 1
> +
> + srctree = os.path.abspath(args.srctree)
> + initial_rev = _extract_source(srctree, args.keep_temp, args.branch,
> True, rd) logger.info('Source tree extracted to %s' % srctree)
>
> if initial_rev:
> @@ -289,7 +311,7 @@ def _prep_extract_operation(config, basepath,
> recipename): return tinfoil
>
>
> -def _extract_source(srctree, keep_temp, devbranch, d):
> +def _extract_source(srctree, keep_temp, devbranch, sync, d):
> """Extract sources of a recipe"""
> import bb.event
> import oe.recipeutils
> @@ -308,21 +330,26 @@ def _extract_source(srctree, keep_temp, devbranch, d):
>
> _check_compatible_recipe(pn, d)
>
> - if os.path.exists(srctree):
> - if not os.path.isdir(srctree):
> - raise DevtoolError("output path %s exists and is not a
> directory" % - srctree)
> - elif os.listdir(srctree):
> - raise DevtoolError("output path %s already exists and is "
> - "non-empty" % srctree)
> + if sync:
> + if not os.path.exists(srctree):
> + raise DevtoolError("output path %s does not exist" %
> srctree) + else:
> + if os.path.exists(srctree):
> + if not os.path.isdir(srctree):
> + raise DevtoolError("output path %s exists and is not a
> directory" % + srctree)
> + elif os.listdir(srctree):
> + raise DevtoolError("output path %s already exists and is "
> + "non-empty" % srctree)
>
> - if 'noexec' in (d.getVarFlags('do_unpack', False) or []):
> - raise DevtoolError("The %s recipe has do_unpack disabled, unable to
> " - "extract source" % pn)
> + if 'noexec' in (d.getVarFlags('do_unpack', False) or []):
> + raise DevtoolError("The %s recipe has do_unpack disabled,
> unable to " + "extract source" % pn)
>
> - # Prepare for shutil.move later on
> - bb.utils.mkdirhier(srctree)
> - os.rmdir(srctree)
> + if not sync:
> + # Prepare for shutil.move later on
> + bb.utils.mkdirhier(srctree)
> + os.rmdir(srctree)
>
> # We don't want notes to be printed, they are too verbose
> origlevel = bb.logger.getEffectiveLevel()
> @@ -431,8 +458,11 @@ def _extract_source(srctree, keep_temp, devbranch, d):
> logger.info('Adding local source files to srctree...')
> shutil.move(os.path.join(tempdir, 'oe-local-files'), srcsubdir)
>
> + if sync:
> + bb.process.run('git fetch file://' + srcsubdir + ' ' +
> devbranch + ':' + devbranch, cwd=srctree)
> + else:
> + shutil.move(srcsubdir, srctree)
>
> - shutil.move(srcsubdir, srctree)
> finally:
> bb.logger.setLevel(origlevel)
>
> @@ -532,7 +562,7 @@ def modify(args, config, basepath, workspace):
> commits = []
> srctree = os.path.abspath(args.srctree)
> if args.extract:
> - initial_rev = _extract_source(args.srctree, False, args.branch, rd)
> + initial_rev = _extract_source(args.srctree, False, args.branch,
> False, rd) if not initial_rev:
> return 1
> logger.info('Source tree extracted to %s' % srctree)
> @@ -1107,6 +1137,15 @@ def register_commands(subparsers, context):
> parser_extract.add_argument('--keep-temp', action="store_true",
> help='Keep temporary directory (for debugging)')
> parser_extract.set_defaults(func=extract)
>
> + parser_sync = subparsers.add_parser('sync', help='Synchronize the
> source for an existing recipe', +
> description='Synchronize the source for an existing recipe', +
>
> formatter_class=argparse.ArgumentDefaultsHelpFormatter) +
> parser_sync.add_argument('recipename', help='Name for recipe to sync the
> source for') + parser_sync.add_argument('srctree', help='Path to where
> to sync the source tree') + parser_sync.add_argument('--branch', '-b',
> default="devtool", help='Name for development branch to checkout') +
> parser_sync.add_argument('--keep-temp', action="store_true", help='Keep
> temporary directory (for debugging)') +
> parser_sync.set_defaults(func=sync)
> +
> parser_update_recipe = subparsers.add_parser('update-recipe',
> help='Apply changes from external source tree to recipe',
> description='Applies changes from external source tree to a recipe
> (updating/adding/removing patches as necessary, or by updating SRCREV)')
> parser_update_recipe.add_argument('recipename', help='Name of recipe to
> update')
Exploring the use case a bit more, do you anticipate using this sync command
in conjunction with a recipe that's in the workspace, or standalone?
Cheers,
Paul
--
Paul Eggleton
Intel Open Source Technology Centre
More information about the Openembedded-core
mailing list