From: Jermain Horsman <[email protected]> This uses an existing setup-layers configuration and modifies one or more repositories using a reference provided by the user.
This is a very minimal implementation, no validation of this reference is done and it is left to the user to provide a valid value. Signed-off-by: Jermain Horsman <[email protected]> --- meta/lib/bblayers/makesetup.py | 11 +++++ .../bblayers/setupwriters/oe-setup-layers.py | 43 ++++++++++++++++--- 2 files changed, 47 insertions(+), 7 deletions(-) diff --git a/meta/lib/bblayers/makesetup.py b/meta/lib/bblayers/makesetup.py index 99d5973760..df266c645d 100644 --- a/meta/lib/bblayers/makesetup.py +++ b/meta/lib/bblayers/makesetup.py @@ -78,6 +78,10 @@ class MakeSetupPlugin(LayerPlugin): def do_make_setup(self, args): """ Writes out a configuration file and/or a script that replicate the directory structure and revisions of the layers in a current build. """ + if args.update is not None and args.reference is None: + logger.error("No reference specified. Please provide one using '--reference REFERENCE'.") + return + for p in self.plugins: if str(p) == args.writer: p.do_write(self, args) @@ -89,6 +93,13 @@ class MakeSetupPlugin(LayerPlugin): parser_setup_layers.add_argument('--output-prefix', '-o', help='File name prefix for the output files, if the default (setup-layers) is undesirable.') + parser_setup_layers.add_argument('--update', '-u', + action='append', + metavar='REPOSITORY', + help='Repository to update, this requires a reference to be specified.\nThis option can be used multiple times.') + parser_setup_layers.add_argument('--reference', '-r', + help="Reference to use when updating repositories.\nThe value can be any git reference, however it is up to the user to provide a valid value.\nThis option is only useful when using '--update'.") + self.plugins = [] for path in (self.tinfoil.config_data.getVar('BBPATH').split(':')): diff --git a/meta/lib/bblayers/setupwriters/oe-setup-layers.py b/meta/lib/bblayers/setupwriters/oe-setup-layers.py index bd71ca1f51..fdc33d94d5 100644 --- a/meta/lib/bblayers/setupwriters/oe-setup-layers.py +++ b/meta/lib/bblayers/setupwriters/oe-setup-layers.py @@ -31,16 +31,45 @@ 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: + raise Exception("File {} has version {}, which is not in supported versions: {}".format(json_path, json_config["version"], supported_versions)) + + return json_config + + def _modify_repo_config(self, json_config, args): + sources = json_config['sources'] + for repo in args.update: + if not repo in sources.keys(): + raise Exception("Repository {} does not exist in setup-layers config".format(repo)) + + layer_remote = json_config['sources'][repo]['git-remote'] + layer_remote['rev'] = args.reference + # 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 is None: + 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") + else: + json = self._read_repo_config(output + ".json") + if not 'sources' in json.keys(): + raise Exception("File {}.json does not contain valid layer sources.".format(output)) + self._modify_repo_config(json, args) + self._write_json(json, output + ".json") logger.info('Created {}.json'.format(output)) if not args.json_only: -- 2.42.0.windows.2
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#193317): https://lists.openembedded.org/g/openembedded-core/message/193317 Mute This Topic: https://lists.openembedded.org/mt/103521079/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
