mirror of
https://git.yoctoproject.org/poky
synced 2026-01-29 21:08:42 +01:00
bitbake-layers: Add ability to update the reference of repositories
This creates a new layers setup with, or, modifies an existing layers setup using, one or more repositories where the references are provided by the user. This is a very minimal implementation, no validation of any reference is done and it is left to the user to provide a valid value. (From OE-Core rev: e69444de713e1ec7959c71f9cdf965d3b5a1c6be) Signed-off-by: Jermain Horsman <jermain.horsman@nedap.com> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
c390b2e615
commit
dd2ed0c363
@@ -31,16 +31,69 @@ class OeSetupLayersWriter():
|
||||
with open(output, 'w') as f:
|
||||
json.dump(repos, f, sort_keys=True, indent=4)
|
||||
|
||||
def _read_repo_config(self, json_path):
|
||||
with open(json_path) as f:
|
||||
json_config = json.load(f)
|
||||
|
||||
supported_versions = ["1.0"]
|
||||
if json_config["version"] not in supported_versions:
|
||||
err = "File {} has version {}, which is not in supported versions: {}".format(json_path, json_config["version"], supported_versions)
|
||||
logger.error(err)
|
||||
raise Exception(err)
|
||||
|
||||
return json_config
|
||||
|
||||
def _modify_repo_config(self, json_config, args):
|
||||
sources = json_config['sources']
|
||||
for pair in args.custom_references:
|
||||
try:
|
||||
repo, rev = pair.split(':', maxsplit=1)
|
||||
except ValueError:
|
||||
err = "Invalid custom reference specified: '{}'. Provide one using 'REPOSITORY:REFERENCE'.".format(pair)
|
||||
logger.error(err)
|
||||
raise Exception(err)
|
||||
if not repo in sources.keys():
|
||||
err = "Repository {} does not exist in setup-layers config".format(repo)
|
||||
logger.error(err)
|
||||
raise Exception(err)
|
||||
|
||||
layer_remote = json_config['sources'][repo]['git-remote']
|
||||
layer_remote['rev'] = rev
|
||||
# Clear describe
|
||||
layer_remote['describe'] = ''
|
||||
|
||||
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. """
|
||||
if not os.path.exists(args.destdir):
|
||||
os.makedirs(args.destdir)
|
||||
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)
|
||||
output = os.path.join(os.path.abspath(args.destdir), output)
|
||||
|
||||
if args.update:
|
||||
# Modify existing layers setup
|
||||
if args.custom_references is None:
|
||||
err = "No custom reference specified. Please provide one using '--use-custom-reference REPOSITORY:REFERENCE'."
|
||||
logger.error(err)
|
||||
raise Exception(err)
|
||||
|
||||
json = self._read_repo_config(output + ".json")
|
||||
if not 'sources' in json.keys():
|
||||
err = "File {}.json does not contain valid layer sources.".format(output)
|
||||
logger.error(err)
|
||||
raise Exception(err)
|
||||
|
||||
else:
|
||||
# Create new layers setup
|
||||
if not os.path.exists(args.destdir):
|
||||
os.makedirs(args.destdir)
|
||||
repos = parent.make_repo_config(args.destdir)
|
||||
json = {"version":"1.0","sources":repos}
|
||||
if not repos:
|
||||
err = "Could not determine layer sources"
|
||||
logger.error(err)
|
||||
raise Exception(err)
|
||||
|
||||
if args.custom_references is not None:
|
||||
self._modify_repo_config(json, args)
|
||||
|
||||
self._write_json(json, output + ".json")
|
||||
logger.info('Created {}.json'.format(output))
|
||||
if not args.json_only:
|
||||
@@ -50,3 +103,15 @@ class OeSetupLayersWriter():
|
||||
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.')
|
||||
|
||||
parser.add_argument('--update', '-u',
|
||||
action='store_true',
|
||||
help=("Instead of writing a new json file, update an existing layer setup json file with custom references provided via the '--use-custom-reference' option."
|
||||
"\nThis will only update repositories for which a custom reference is specified, all other repositores will be left unchanged."))
|
||||
parser.add_argument('--use-custom-reference', '-r',
|
||||
action='append',
|
||||
dest='custom_references',
|
||||
metavar='REPOSITORY:REFERENCE',
|
||||
help=("A pair consisting of a repository and a custom reference to use for it (by default the currently checked out commit id would be written out)."
|
||||
"\nThis value can be any reference that 'git checkout' would accept, and is not checked for validity."
|
||||
"\nThis option can be used multiple times."))
|
||||
|
||||
Reference in New Issue
Block a user