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.

(From OE-Core rev: 0c3f289576a2ab35b1d1d8854d6763553cc3bf09)

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Paul Eggleton 2015-09-22 17:21:24 +01:00 committed by Richard Purdie
parent 99cd79d8be
commit ae788fbd46
5 changed files with 25 additions and 19 deletions

View File

@ -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))

View File

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

View File

@ -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:

View File

@ -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:

View File

@ -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")