[OE-core] [OE-Core][master][PATCH] devtool: Add --remove-work option for devtool reset command
Khem Raj
raj.khem at gmail.com
Mon Oct 7 18:39:57 UTC 2019
On Mon, Oct 7, 2019 at 11:36 AM Sai Hari Chandana Kalluri
<chandana.kalluri at xilinx.com> wrote:
>
> Enable --remove-work option for devtool reset command that allows user
> to clean up source directory within workspace.
>
> Currently devtool reset command only removes recipes and user is forced
> to manually remove the sources directory within the workspace before
> running devtool modify again.
>
> Using devtool reset -r or devtool reset --remove-work option, user can
> cleanup the sources directory along with the recipe instead of manually
> cleaning it.
perhaps we can have another cmd like "reset-all" like cleanall ?
which would remove everything that devtool did external to bblayers
for that recipe.
>
> syntax: devtool reset -r <recipename>
> Ex: devtool reset -r zip
>
> devtool finish -r <recipename> <layer-name>
> Ex: devtool finish -r zip meta-yocto-bsp
>
> Signed-off-by: Sai Hari Chandana Kalluri <chandana.kalluri at xilinx.com>
> ---
> scripts/lib/devtool/standard.py | 26 +++++++++++++++++++-------
> 1 file changed, 19 insertions(+), 7 deletions(-)
>
> diff --git a/scripts/lib/devtool/standard.py b/scripts/lib/devtool/standard.py
> index 60c9a04..1c0cd8a 100644
> --- a/scripts/lib/devtool/standard.py
> +++ b/scripts/lib/devtool/standard.py
> @@ -1852,7 +1852,7 @@ def status(args, config, basepath, workspace):
> return 0
>
>
> -def _reset(recipes, no_clean, config, basepath, workspace):
> +def _reset(recipes, no_clean, remove_work, config, basepath, workspace):
> """Reset one or more recipes"""
> import oe.path
>
> @@ -1930,10 +1930,15 @@ def _reset(recipes, no_clean, config, basepath, workspace):
> srctreebase = workspace[pn]['srctreebase']
> if os.path.isdir(srctreebase):
> if os.listdir(srctreebase):
> - # We don't want to risk wiping out any work in progress
> - logger.info('Leaving source tree %s as-is; if you no '
> - 'longer need it then please delete it manually'
> - % srctreebase)
> + if remove_work:
> + logger.info('-r argument used on %s, removing source tree.'
> + ' You will lose any unsaved work' %pn)
> + shutil.rmtree(srctreebase)
> + else:
> + # We don't want to risk wiping out any work in progress
> + logger.info('Leaving source tree %s as-is; if you no '
> + 'longer need it then please delete it manually'
> + % srctreebase)
> else:
> # This is unlikely, but if it's empty we can just remove it
> os.rmdir(srctreebase)
> @@ -1943,6 +1948,10 @@ def _reset(recipes, no_clean, config, basepath, workspace):
> def reset(args, config, basepath, workspace):
> """Entry point for the devtool 'reset' subcommand"""
> import bb
> + import shutil
> +
> + recipes = ""
> +
> if args.recipename:
> if args.all:
> raise DevtoolError("Recipe cannot be specified if -a/--all is used")
> @@ -1957,7 +1966,7 @@ def reset(args, config, basepath, workspace):
> else:
> recipes = args.recipename
>
> - _reset(recipes, args.no_clean, config, basepath, workspace)
> + _reset(recipes, args.no_clean, args.remove_work, config, basepath, workspace)
>
> return 0
>
> @@ -2009,6 +2018,7 @@ def finish(args, config, basepath, workspace):
> raise DevtoolError('Source tree is not clean:\n\n%s\nEnsure you have committed your changes or use -f/--force if you are sure there\'s nothing that needs to be committed' % dirty)
>
> no_clean = args.no_clean
> + remove_work=args.remove_work
> tinfoil = setup_tinfoil(basepath=basepath, tracking=True)
> try:
> rd = parse_recipe(config, tinfoil, args.recipename, True)
> @@ -2160,7 +2170,7 @@ def finish(args, config, basepath, workspace):
> if args.dry_run:
> logger.info('Resetting recipe (dry-run)')
> else:
> - _reset([args.recipename], no_clean=no_clean, config=config, basepath=basepath, workspace=workspace)
> + _reset([args.recipename], no_clean=no_clean, remove_work=remove_work, config=config, basepath=basepath, workspace=workspace)
>
> return 0
>
> @@ -2272,6 +2282,7 @@ def register_commands(subparsers, context):
> parser_reset.add_argument('recipename', nargs='*', help='Recipe to reset')
> parser_reset.add_argument('--all', '-a', action="store_true", help='Reset all recipes (clear workspace)')
> parser_reset.add_argument('--no-clean', '-n', action="store_true", help='Don\'t clean the sysroot to remove recipe output')
> + parser_reset.add_argument('--remove-work', '-r', action="store_true", help='Clean the sources directory along with append')
> parser_reset.set_defaults(func=reset)
>
> parser_finish = subparsers.add_parser('finish', help='Finish working on a recipe in your workspace',
> @@ -2282,6 +2293,7 @@ def register_commands(subparsers, context):
> parser_finish.add_argument('--mode', '-m', choices=['patch', 'srcrev', 'auto'], default='auto', help='Update mode (where %(metavar)s is %(choices)s; default is %(default)s)', metavar='MODE')
> parser_finish.add_argument('--initial-rev', help='Override starting revision for patches')
> parser_finish.add_argument('--force', '-f', action="store_true", help='Force continuing even if there are uncommitted changes in the source tree repository')
> + parser_finish.add_argument('--remove-work', '-r', action="store_true", help='Clean the sources directory under workspace')
> parser_finish.add_argument('--no-clean', '-n', action="store_true", help='Don\'t clean the sysroot to remove recipe output')
> parser_finish.add_argument('--no-overrides', '-O', action="store_true", help='Do not handle other override branches (if they exist)')
> parser_finish.add_argument('--dry-run', '-N', action="store_true", help='Dry-run (just report changes instead of writing them)')
> --
> 2.7.4
>
> --
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core
More information about the Openembedded-core
mailing list