summaryrefslogtreecommitdiffstats
path: root/meta/lib/bblayers/setupwriters/oe-setup-layers.py
diff options
context:
space:
mode:
Diffstat (limited to 'meta/lib/bblayers/setupwriters/oe-setup-layers.py')
-rw-r--r--meta/lib/bblayers/setupwriters/oe-setup-layers.py50
1 files changed, 50 insertions, 0 deletions
diff --git a/meta/lib/bblayers/setupwriters/oe-setup-layers.py b/meta/lib/bblayers/setupwriters/oe-setup-layers.py
new file mode 100644
index 0000000000..f6a484b766
--- /dev/null
+++ b/meta/lib/bblayers/setupwriters/oe-setup-layers.py
@@ -0,0 +1,50 @@
+#
+# 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.')