mirror of
https://git.yoctoproject.org/poky
synced 2026-02-27 03:49:41 +01:00
This addresses a long standing gap in the core offering:
there is no tooling to capture the currently configured layers
with their revisions, or restore the layers from a configuration
file (without using external tools, some of which aren't particularly
suitable for the task). This plugin addresses the 'capture' part.
Note that the actual writing is performed by a sub-plugin; one such
sub-plugin is provided (for the json + python script format), but
more can be added (e.g. kas, repo, etc.).
How to save a layer configuration:
a) Running with default choices:
$ bitbake-layers create-layers-setup /srv/work/alex/meta-alex/
NOTE: Starting bitbake server...
NOTE: Created /srv/work/alex/meta-alex/setup-layers.json
NOTE: Created /srv/work/alex/meta-alex/setup-layers
b) Command line options:
NOTE: Starting bitbake server...
usage: bitbake-layers create-layers-setup [-h] [--output-prefix OUTPUT_PREFIX] [--writer {oe-setup-layers}] [--json-only] destdir
Writes out a configuration file and/or a script that replicate the directory structure and revisions of the layers in a current build.
positional arguments:
destdir Directory where to write the output
(if it is inside one of the layers, the layer becomes a bootstrap repository and thus will be excluded from fetching).
optional arguments:
-h, --help show this help message and exit
--output-prefix OUTPUT_PREFIX, -o OUTPUT_PREFIX
File name prefix for the output files, if the default (setup-layers) is undesirable.
--writer {oe-setup-layers}, -w {oe-setup-layers}
Choose the output format (defaults to oe-setup-layers).
Currently supported options are:
oe-setup-layers - a self-contained python script and a json config for it.
--json-only When using the oe-setup-layers writer, write only the layer configuruation in json format. Otherwise, also a copy of scripts/oe-setup-layers (from oe-core or poky) is provided, which is a self contained python script that fetches all the needed layers and sets them to correct revisions using the data from the json.
(From OE-Core rev: 5606d1a123a3816ab45e49ee7707ed84c9c23c5c)
Signed-off-by: Alexander Kanavin <alex@linutronix.de>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
51 lines
1.9 KiB
Python
51 lines
1.9 KiB
Python
#
|
|
# Copyright OpenEmbedded Contributors
|
|
#
|
|
# SPDX-License-Identifier: GPL-2.0-only
|
|
#
|
|
|
|
import logging
|
|
import os
|
|
import json
|
|
import stat
|
|
|
|
logger = logging.getLogger('bitbake-layers')
|
|
|
|
def plugin_init(plugins):
|
|
return OeSetupLayersWriter()
|
|
|
|
class OeSetupLayersWriter():
|
|
|
|
def __str__(self):
|
|
return "oe-setup-layers"
|
|
|
|
def _write_python(self, input, output):
|
|
with open(input) as f:
|
|
script = f.read()
|
|
with open(output, 'w') as f:
|
|
f.write(script)
|
|
st = os.stat(output)
|
|
os.chmod(output, st.st_mode | stat.S_IEXEC | stat.S_IXGRP | stat.S_IXOTH)
|
|
|
|
def _write_json(self, repos, output):
|
|
with open(output, 'w') as f:
|
|
json.dump(repos, f, sort_keys=True, indent=4)
|
|
|
|
def do_write(self, parent, args):
|
|
""" Writes out a python script and a json config that replicate the directory structure and revisions of the layers in a current build. """
|
|
repos = parent.make_repo_config(args.destdir)
|
|
json = {"version":"1.0","sources":repos}
|
|
if not repos:
|
|
raise Exception("Could not determine layer sources")
|
|
output = args.output_prefix or "setup-layers"
|
|
output = os.path.join(os.path.abspath(args.destdir),output)
|
|
self._write_json(json, output + ".json")
|
|
logger.info('Created {}.json'.format(output))
|
|
if not args.json_only:
|
|
self._write_python(os.path.join(os.path.dirname(__file__),'../../../../scripts/oe-setup-layers'), output)
|
|
logger.info('Created {}'.format(output))
|
|
|
|
def register_arguments(self, parser):
|
|
parser.add_argument('--json-only', action='store_true',
|
|
help='When using the oe-setup-layers writer, write only the layer configuruation in json format. Otherwise, also a copy of scripts/oe-setup-layers (from oe-core or poky) is provided, which is a self contained python script that fetches all the needed layers and sets them to correct revisions using the data from the json.')
|