yocto-autobuilder-helper/scripts/layer-config
Thomas Goodwin 417c7d33db layer-config, shared-repo-unpack: Sub-repos in NEEDREPOS
The previous fixes requires the user to set "no-layer-add"
for a repo and then use ADDLAYER to insert the sub-repos
(e.g., meta-openmbedded/meta-oe) as a two-part process.
This means that you would also have to specify that flag
if a repo that is a layer with dependencies is in the
list so that it can be inserted in the correct order later
via ADDLAYER to avoid parsing problems.  This fix allows
for specifying a NEEDREPOS with the subdirectory of the
target layer (e.g., meta-openembedded/meta-oe) so that
there is no need for the "no-layer-add" followed by
ADDLAYER combination.  The entire meta-openembedded
repo would be moved into place, and the sublayer added
to bblayers.conf.

Signed-off-by: Thomas Goodwin <btgoodwin@geontech.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2019-08-02 17:34:48 +01:00

63 lines
2.0 KiB
Python
Executable File

#!/usr/bin/env python3
#
# Move the repositories into the correct layout and generate bblayers.conf
#
import json
import os
import sys
import subprocess
import errno
import utils
parser = utils.ArgParser(description='Moves the repositories into the correct layout and generates bblayers.conf.')
parser.add_argument('abworkdir',
help="The autobuilder working directory")
parser.add_argument('target',
help="The target to filter the repos to")
args = parser.parse_args()
ourconfig = utils.loadconfig()
def bitbakecmd(targetdir, cmd):
subprocess.check_call(". ./oe-init-build-env; %s" % cmd, shell=True, cwd=targetdir)
needrepos = utils.getconfigvar("NEEDREPOS", ourconfig, args.target, None)
callinit = False
repos = utils.getconfig("repo-defaults", ourconfig)
for repo in needrepos:
repo_basename = repo.split('/')[0]
checkdir = repo_basename
if repo_basename in repos:
if "call-init" in repos[repo_basename] and repos[repo_basename]["call-init"]:
callinit = True
if "checkout-dirname" in repos[repo_basename]:
checkdir = repos[repo_basename]["checkout-dirname"]
source = args.abworkdir + "/repos/" + repo_basename
destination = args.abworkdir + "/" + checkdir
if not os.path.isdir(destination) or callinit:
utils.mkdir(destination)
for f in os.listdir(source):
subprocess.check_call(['mv', source + "/" + f, destination + "/"])
if callinit:
subprocess.check_call(". ./oe-init-build-env", shell=True, cwd=args.abworkdir)
for repo in needrepos:
repo_basename = repo.split('/')[0]
if repo_basename in repos and "no-layer-add" in repos[repo_basename] and repos[repo_basename]["no-layer-add"]:
continue
try:
bitbakecmd(args.abworkdir, "bitbake-layers add-layer %s" % (args.abworkdir + "/" + repo))
except subprocess.CalledProcessError as e:
utils.printheader("ERROR: Command %s failed with exit code %d, see errors above." % (e.cmd, e.returncode))
sys.exit(e.returncode)