devtool: fix source extraction to work with recipe specific sysroots

When extracting source for a recipe within devtool (for extract, modify
or upgrade) We need to redirect WORKDIR, STAMPS_DIR etc. under a
temporary directory so that:
 (a) we pick up all files that get unpacked to the WORKDIR, and
 (b) we don't disturb the existing build
However, with recipe-specific sysroots the sysroots for the recipe will
be prepared under WORKDIR, and if we used the system temporary directory
i.e. usually /tmp) as used by mkdtemp by default, then our attempts to
hardlink files into the recipe-specific sysroots will fail on systems
where /tmp is a different filesystem, and we'd have to fall back to
copying the files which is a waste of time. Put the temp directory under
the WORKDIR to prevent that from being a problem.

(From OE-Core rev: e10a973cd9390eacb13bdb99693a0622bd3695f5)

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
[RP: Add needed mkdirhier call]
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Paul Eggleton 2017-01-17 12:14:36 +13:00 committed by Richard Purdie
parent 38bcf14abc
commit 9b3e808624
1 changed files with 15 additions and 1 deletions

View File

@ -465,7 +465,21 @@ def _extract_source(srctree, keep_temp, devbranch, sync, d, tinfoil):
os.rmdir(srctree)
initial_rev = None
tempdir = tempfile.mkdtemp(prefix='devtool')
# We need to redirect WORKDIR, STAMPS_DIR etc. under a temporary
# directory so that:
# (a) we pick up all files that get unpacked to the WORKDIR, and
# (b) we don't disturb the existing build
# However, with recipe-specific sysroots the sysroots for the recipe
# will be prepared under WORKDIR, and if we used the system temporary
# directory (i.e. usually /tmp) as used by mkdtemp by default, then
# our attempts to hardlink files into the recipe-specific sysroots
# will fail on systems where /tmp is a different filesystem, and it
# would have to fall back to copying the files which is a waste of
# time. Put the temp directory under the WORKDIR to prevent that from
# being a problem.
tempbasedir = d.getVar('WORKDIR')
bb.utils.mkdirhier(tempbasedir)
tempdir = tempfile.mkdtemp(prefix='devtooltmp-', dir=tempbasedir)
try:
tinfoil.logger.setLevel(logging.WARNING)