[Toaster] [review-request][PATCH] toaster: Fix import of custom layers from toasterjson.conf
sujith h
sujith.h at gmail.com
Fri Aug 21 02:16:59 PDT 2015
Hi,
With this path I was able to test the toasterconf.json I made for mentor
and build an image. I have also verified that toaster's default
configuration file also works.
I built core-image-minimal with the default configuration. The code that I
have written looks bit ugly ( to be honest ). With reviewers help I can
make it better.
Thanks,
Sujith H
On Fri, Aug 21, 2015 at 2:11 PM, Sujith H <sujith.h at gmail.com> wrote:
> This patch fixes import of custom layers from toasterjson.conf
> file. For example it was verified using layers like meta-mentor,
> meta-fsl-arm, meta-sourcery etc.
>
> Signed-off-by: Sujith Haridasan <Sujith_Haridasan at mentor.com>
> ---
> .../toaster/bldcontrol/localhostbecontroller.py | 49
> ++++++++++++++++++++--
> .../bldcontrol/management/commands/loadconf.py | 12 ++++--
> 2 files changed, 54 insertions(+), 7 deletions(-)
>
> diff --git a/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py
> b/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py
> index 231a7d3..c43f33f 100644
> --- a/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py
> +++ b/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py
> @@ -178,7 +178,7 @@ class
> LocalhostBEController(BuildEnvironmentController):
> self.be.save()
> logger.debug("localhostbecontroller: Stopped bitbake server")
>
> - def getGitCloneDirectory(self, url, branch):
> + def getGitCloneDirectory(self, url, branch, cached_layers=None):
> """ Utility that returns the last component of a git path as
> directory
> """
> import re
> @@ -191,6 +191,17 @@ class
> LocalhostBEController(BuildEnvironmentController):
>
> # word of attention; this is a localhost-specific issue; only on
> the localhost we expect to have "HEAD" releases
> # which _ALWAYS_ means the current poky checkout
> + if cached_layers:
> + if not url.endswith('.git'):
> + from os.path import dirname
> + extractDir = dirname(url)
> + for key, val in cached_layers.iteritems():
> + if val == extractDir:
> + local_checkout_path = key
> + return cached_layers[local_checkout_path]
> + else:
> + local_checkout_path = cached_layers[url]
> + return local_checkout_path
> from os.path import dirname as DN
> local_checkout_path =
> DN(DN(DN(DN(DN(os.path.abspath(__file__))))))
> #logger.debug("localhostbecontroller: using HEAD checkout in %s"
> % local_checkout_path)
> @@ -245,7 +256,14 @@ class
> LocalhostBEController(BuildEnvironmentController):
>
> # 3. checkout the repositories
> for giturl, commit in gitrepos.keys():
> - localdirname = os.path.join(self.be.sourcedir,
> self.getGitCloneDirectory(giturl, commit))
> + if not giturl.endswith('.git'):
> + for key, val in cached_layers.iteritems():
> + if os.path.dirname(giturl) == val:
> + tmpKey = key
> + tmpVal = gitrepos[(giturl, commit)]
> + gitrepos[(tmpKey, commit)] += tmpVal
> + giturl = tmpKey
> + localdirname = os.path.join(self.be.sourcedir,
> self.getGitCloneDirectory(giturl, commit, cached_layers))
> logger.debug("localhostbecontroller: giturl %s:%s checking
> out in current directory %s" % (giturl, commit, localdirname))
>
> # make sure our directory is a git repository
> @@ -280,13 +298,36 @@ class
> LocalhostBEController(BuildEnvironmentController):
>
> # verify our repositories
> for name, dirpath in gitrepos[(giturl, commit)]:
> - localdirpath = os.path.join(localdirname, dirpath)
> + localdirpath = localdirname
> logger.debug("localhostbecontroller: localdirpath
> expected '%s'" % localdirpath)
> if not os.path.exists(localdirpath):
> raise BuildSetupException("Cannot find layer git path
> '%s' in checked out repository '%s:%s'. Aborting." % (localdirpath, giturl,
> commit))
>
> + layerlisturl, layerlistdir = "", ""
> + layerlisturl = [localurl for localurl, localpath in
> cached_layers.iteritems() if localpath == localdirpath]
> + if len(layerlisturl) != 0:
> + layerlisturl = layerlisturl[0]
> + if len(layerlisturl) == 0:
> + if os.path.basename(localdirpath).startswith("_"):
> + layerlisturl = localdirpath
> if name != "bitbake":
> - layerlist.append(localdirpath.rstrip("/"))
> + for gitlocal, localpath in gitrepos.iteritems():
> + if layerlisturl in gitlocal:
> + if len(localpath) > 2:
> + for paths in localpath:
> + if "bitbake" not in paths[1]:
> + layerlistdir = localdirpath +"/"
> + str(paths[1])
> + if layerlistdir not in layerlist:
> +
> layerlist.append(layerlistdir.rstrip("/"))
> + else:
> + layerlist.append(localdirpath.rstrip("/"))
> + break
> + if len(layerlist) == 0:
> + for gitlocal, localpath in gitrepos.iteritems():
> + for paths in localpath:
> + if "bitbake" not in paths:
> + layerlist.append(layerlisturl + "/" +
> str(paths[1]))
> +
>
> logger.debug("localhostbecontroller: current layer list %s " %
> pformat(layerlist))
>
> diff --git
> a/bitbake/lib/toaster/bldcontrol/management/commands/loadconf.py
> b/bitbake/lib/toaster/bldcontrol/management/commands/loadconf.py
> index 5022b59..a22f744 100644
> --- a/bitbake/lib/toaster/bldcontrol/management/commands/loadconf.py
> +++ b/bitbake/lib/toaster/bldcontrol/management/commands/loadconf.py
> @@ -45,12 +45,14 @@ class Command(BaseCommand):
> for i in ['bitbake', 'releases', 'defaultrelease', 'config',
> 'layersources']:
> assert i in data
>
> - def _read_git_url_from_local_repository(address):
> + def _read_git_url_from_local_repository(address, path = None):
> url = None
> + if not path:
> + path = os.path.dirname(filepath)
> # we detect the remote name at runtime
> import subprocess
> (remote, remote_name) = address.split(":", 1)
> - cmd = subprocess.Popen("git remote -v", shell=True, cwd =
> os.path.dirname(filepath), stdout=subprocess.PIPE, stderr = subprocess.PIPE)
> + cmd = subprocess.Popen("git remote -v", shell=True, cwd =
> path, stdout=subprocess.PIPE, stderr = subprocess.PIPE)
> (out,err) = cmd.communicate()
> if cmd.returncode != 0:
> logging.warning("Error while importing layer vcs_url: git
> error: %s" % err)
> @@ -121,7 +123,11 @@ class Command(BaseCommand):
> logger.error("Local layer path %s must exists.
> Are you trying to import a layer that does not exist ? Check your local
> toasterconf.json" % lo.local_path)
>
> if layerinfo['vcs_url'].startswith("remote:"):
> - lo.vcs_url =
> _read_git_url_from_local_repository(layerinfo['vcs_url'])
> + if layerinfo['local_path'] not in ["meta",
> "meta-yocto", "meta-yocto-bsp"]:
> + repo_path = layerinfo['local_path']
> + else:
> + repo_path = None
> + lo.vcs_url =
> _read_git_url_from_local_repository(layerinfo['vcs_url'], repo_path)
> if lo.vcs_url is None:
> logger.error("The toaster config file
> references the local git repo, but Toaster cannot detect it.\nYour local
> configuration for layer %s is invalid. Make sure that the toasterconf.json
> file is correct." % layerinfo['name'])
>
> --
> 1.9.1
>
>
--
സുജിത് ഹരിദാസന്
Bangalore
<Project>Contributor to KDE project
http://fci.wikia.com/wiki/Anti-DRM-Campaign
<Blog> http://sujithh.info
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.yoctoproject.org/pipermail/toaster/attachments/20150821/9f560f28/attachment-0001.html>
More information about the toaster
mailing list