recipetool: create: support creation of additional files by plugins

Allow plugins to create additional files to go alongside the recipe. The
plugins don't know what the output filename is going to be, so they need
to put the files in a temporary location and add them to an "extrafiles"
dict within extravalues where the destination filename is the key and
the temporary path is the value.

devtool add was also extended to ensure these files get moved in and
preserved upon reset if they've been edited by the user.

(From OE-Core rev: 334b9451111b7e3efbb43b3a4eecebcab8ec6f0e)

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 2016-03-09 17:48:54 +13:00 committed by Richard Purdie
parent 2279eb2a4c
commit 309b2e6c57
2 changed files with 16 additions and 1 deletions

View File

@ -189,6 +189,9 @@ def add(args, config, basepath, workspace):
raise DevtoolError('Couldn\'t find source tree created by recipetool')
bb.utils.mkdirhier(recipedir)
shutil.move(recipes[0], recipefile)
# Move any additional files created by recipetool
for fn in os.listdir(tempdir):
shutil.move(os.path.join(tempdir, fn), recipedir)
else:
raise DevtoolError('Command \'%s\' did not create any recipe file:\n%s' % (e.command, e.stdout))
attic_recipe = os.path.join(config.workspace_path, 'attic', recipename, os.path.basename(recipefile))
@ -199,7 +202,8 @@ def add(args, config, basepath, workspace):
shutil.rmtree(tmpsrcdir)
shutil.rmtree(tempdir)
_add_md5(config, recipename, recipefile)
for fn in os.listdir(recipedir):
_add_md5(config, recipename, os.path.join(recipedir, fn))
if args.fetch and not args.no_git:
setup_git_repo(srctree, args.version, 'devtool')

View File

@ -560,6 +560,8 @@ def create_recipe(args):
for handler in handlers:
handler.process(srctree_use, classes, lines_before, lines_after, handled, extravalues)
extrafiles = extravalues.pop('extrafiles', {})
if not realpv:
realpv = extravalues.get('PV', None)
if realpv:
@ -601,6 +603,15 @@ def create_recipe(args):
logger.error('Output file %s already exists' % outfile)
sys.exit(1)
# Move any extra files the plugins created to a directory next to the recipe
if outfile == '-':
extraoutdir = pn
else:
extraoutdir = os.path.join(os.path.dirname(outfile), pn)
bb.utils.mkdirhier(extraoutdir)
for destfn, extrafile in extrafiles.iteritems():
shutil.move(extrafile, os.path.join(extraoutdir, destfn))
lines = lines_before
lines_before = []
skipblank = True