[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