[bitbake-devel] [PATCH] Fix bitbake-layerindex to checkout the requested branch

Mark Hatle mark.hatle at kernel.crashing.org
Fri Feb 14 18:08:27 UTC 2020


This issue was already found (and I thought fixed?)  Maybe the submission hadn't
been accepted.  See:

http://lists.openembedded.org/pipermail/bitbake-devel/2019-December/020645.html

Also comments below inline:

On 2/14/20 9:01 AM, dl9pf at gmx.de wrote:
> From: Jan-Simon Moeller <jsmoeller at linuxfoundation.org>
> 
> Bitbake-layerindex would not respect the branch given with -b .
> This fixes the clone command.
> 
> V2: Corrected 'branch' back to 'branches' and added
>     a FIXME on multiple LAYERSERIES_CORENAMES.
> V3: After discussion on IRC use branches[-1] as well
>     educated guess for now but leave the FIXME in place.
> 
> Signed-off-by: Jan-Simon Moeller <jsmoeller at linuxfoundation.org>
> ---
>  lib/bblayers/layerindex.py | 10 +++++++---
>  1 file changed, 7 insertions(+), 3 deletions(-)
> 
> diff --git a/lib/bblayers/layerindex.py b/lib/bblayers/layerindex.py
> index 57cd9027..096ea4f8 100644
> --- a/lib/bblayers/layerindex.py
> +++ b/lib/bblayers/layerindex.py
> @@ -24,7 +24,7 @@ class LayerIndexPlugin(ActionPlugin):
>      This class inherits ActionPlugin to get do_add_layer.
>      """
> 
> -    def get_fetch_layer(self, fetchdir, url, subdir, fetch_layer):
> +    def get_fetch_layer(self, fetchdir, url, subdir, fetch_layer, branch):
>          layername = self.get_layer_name(url)
>          if os.path.splitext(layername)[1] == '.git':
>              layername = os.path.splitext(layername)[0]
> @@ -32,7 +32,7 @@ class LayerIndexPlugin(ActionPlugin):
>          layerdir = os.path.join(repodir, subdir)
>          if not os.path.exists(repodir):
>              if fetch_layer:
> -                result = subprocess.call(['git', 'clone', url, repodir])
> +                result = subprocess.call(['git', 'clone', '-b', branch, url, repodir])
>                  if result:
>                      logger.error("Failed to download %s" % url)

There are cases where it might be called if the branch is blank.  So the repo
URL should be called instead.  Thus -b should not be forced to always be there.
 (odd use-case, but it does exist.)

>                      return None, None, None
> @@ -73,6 +73,10 @@ class LayerIndexPlugin(ActionPlugin):
>              branches = [args.branch]
>          else:
>              branches = (self.tinfoil.config_data.getVar('LAYERSERIES_CORENAMES') or 'master').split()
> +
> +        # FIXME: multple branches is not deterministic when cloning the repository
> +        # for now we pull the last entry
> +        checkoutbranch = branches[-1]

The branch here is the name of the branch(es) to query the layerindex for.  They
are in order of priority, so the first found would be the one that is to be used.

>          logger.debug(1, 'Trying branches: %s' % branches)
> 
>          ignore_layers = []
> @@ -171,7 +175,7 @@ class LayerIndexPlugin(ActionPlugin):
>                  subdir, name, layerdir = self.get_fetch_layer(fetchdir,
>                                                        layerBranch.layer.vcs_url,
>                                                        layerBranch.vcs_subdir,
> -                                                      not args.show_only)
> +                                                      not args.show_only, checkoutbranch)

This is incorrect, it must use the branch value from the
layerBranch.actual_branch.  Since the branch in the repository and the branch
(corename) being questioned can and are often different.

--Mark

>                  if not name:
>                      # Error already shown
>                      return 1
> --
> 2.11.0
> 


More information about the bitbake-devel mailing list