From 0c3f289576a2ab35b1d1d8854d6763553cc3bf09 Mon Sep 17 00:00:00 2001 From: Paul Eggleton Date: Tue, 22 Sep 2015 17:21:24 +0100 Subject: devtool: check that source tree still exists Sometimes, particularly if you extracted the source to /tmp which is on tmpfs, the external source tree that is being pointed to may no longer exist when you come to run "devtool build" or "devtool update-recipe" etc. Make all of the commands that need to check for a recipe being in the workspace call a single function and have that function additionally check the source tree still exists where appropriate. Signed-off-by: Paul Eggleton Signed-off-by: Richard Purdie --- scripts/lib/devtool/__init__.py | 14 ++++++++++++++ scripts/lib/devtool/build.py | 6 ++---- scripts/lib/devtool/deploy.py | 7 +++---- scripts/lib/devtool/package.py | 6 ++---- scripts/lib/devtool/standard.py | 11 ++++------- 5 files changed, 25 insertions(+), 19 deletions(-) diff --git a/scripts/lib/devtool/__init__.py b/scripts/lib/devtool/__init__.py index 404d3e6645..fb699b5c61 100644 --- a/scripts/lib/devtool/__init__.py +++ b/scripts/lib/devtool/__init__.py @@ -136,3 +136,17 @@ def parse_recipe(config, tinfoil, pn, appends): not path.startswith(config.workspace_path)] return oe.recipeutils.parse_recipe(recipefile, append_files, tinfoil.config_data) + +def check_workspace_recipe(workspace, pn, checksrc=True): + """ + Check that a recipe is in the workspace and (optionally) that source + is present. + """ + if not pn in workspace: + raise DevtoolError("No recipe named '%s' in your workspace" % pn) + if checksrc: + srctree = workspace[pn]['srctree'] + if not os.path.exists(srctree): + raise DevtoolError("Source tree %s for recipe %s does not exist" % (srctree, pn)) + if not os.listdir(srctree): + raise DevtoolError("Source tree %s for recipe %s is empty" % (srctree, pn)) diff --git a/scripts/lib/devtool/build.py b/scripts/lib/devtool/build.py index 335aff5491..9b58858a62 100644 --- a/scripts/lib/devtool/build.py +++ b/scripts/lib/devtool/build.py @@ -21,7 +21,7 @@ import bb import logging import argparse import tempfile -from devtool import exec_build_env_command, DevtoolError +from devtool import exec_build_env_command, check_workspace_recipe, DevtoolError logger = logging.getLogger('devtool') @@ -42,9 +42,7 @@ def _create_conf_file(values, conf_file=None): def build(args, config, basepath, workspace): """Entry point for the devtool 'build' subcommand""" - if not args.recipename in workspace: - raise DevtoolError("no recipe named %s in your workspace" % - args.recipename) + check_workspace_recipe(workspace, args.recipename) build_task = config.get('Build', 'build_task', 'populate_sysroot') diff --git a/scripts/lib/devtool/deploy.py b/scripts/lib/devtool/deploy.py index fa93adf181..41b666ff96 100644 --- a/scripts/lib/devtool/deploy.py +++ b/scripts/lib/devtool/deploy.py @@ -19,7 +19,7 @@ import os import subprocess import logging -from devtool import exec_fakeroot, setup_tinfoil, DevtoolError +from devtool import exec_fakeroot, setup_tinfoil, check_workspace_recipe, DevtoolError logger = logging.getLogger('devtool') @@ -28,9 +28,8 @@ def deploy(args, config, basepath, workspace): import re import oe.recipeutils - if not args.recipename in workspace: - raise DevtoolError("no recipe named %s in your workspace" % - args.recipename) + check_workspace_recipe(workspace, args.recipename, checksrc=False) + try: host, destdir = args.target.split(':') except ValueError: diff --git a/scripts/lib/devtool/package.py b/scripts/lib/devtool/package.py index 3a7a36b600..28ecfed7a7 100644 --- a/scripts/lib/devtool/package.py +++ b/scripts/lib/devtool/package.py @@ -20,7 +20,7 @@ import os import subprocess import logging from bb.process import ExecutionError -from devtool import exec_build_env_command, setup_tinfoil, DevtoolError +from devtool import exec_build_env_command, setup_tinfoil, check_workspace_recipe, DevtoolError logger = logging.getLogger('devtool') @@ -30,9 +30,7 @@ def plugin_init(pluginlist): def package(args, config, basepath, workspace): """Entry point for the devtool 'package' subcommand""" - if not args.recipename in workspace: - raise DevtoolError("no recipe named %s in your workspace" % - args.recipename) + check_workspace_recipe(workspace, args.recipename) image_pkgtype = config.get('Package', 'image_pkgtype', '') if not image_pkgtype: diff --git a/scripts/lib/devtool/standard.py b/scripts/lib/devtool/standard.py index d5900b4f82..018ef2a987 100644 --- a/scripts/lib/devtool/standard.py +++ b/scripts/lib/devtool/standard.py @@ -25,7 +25,7 @@ import logging import argparse import scriptutils import errno -from devtool import exec_build_env_command, setup_tinfoil, DevtoolError +from devtool import exec_build_env_command, setup_tinfoil, check_workspace_recipe, DevtoolError from devtool import parse_recipe logger = logging.getLogger('devtool') @@ -776,9 +776,7 @@ def _guess_recipe_update_mode(srctree, rdata): def update_recipe(args, config, basepath, workspace): """Entry point for the devtool 'update-recipe' subcommand""" - if not args.recipename in workspace: - raise DevtoolError("no recipe named %s in your workspace" % - args.recipename) + check_workspace_recipe(workspace, args.recipename) if args.append: if not os.path.exists(args.append): @@ -830,9 +828,8 @@ def reset(args, config, basepath, workspace): if args.recipename: if args.all: raise DevtoolError("Recipe cannot be specified if -a/--all is used") - elif not args.recipename in workspace: - raise DevtoolError("no recipe named %s in your workspace" % - args.recipename) + else: + check_workspace_recipe(workspace, args.recipename, checksrc=False) elif not args.all: raise DevtoolError("Recipe must be specified, or specify -a/--all to " "reset all recipes") -- cgit 1.2.3-korg