[OE-core] [PATCH v3 2/2] bitbake: fetch2/git: git-lfs check

Richard Purdie richard.purdie at linuxfoundation.org
Thu Apr 25 09:51:39 UTC 2019


On Thu, 2019-04-25 at 09:54 +0800, Naveen Saini wrote:
> Build will fail if repository has lfs contents in absense of git-lfs tool on host.
> Build will pass if repository may or may not contains lfs content if host has git-lfs installed.

Bitbake patches need to go to the bitbake list.

> Signed-off-by: Naveen Saini <naveen.kumar.saini at intel.com>
> ---
>  bitbake/lib/bb/fetch2/git.py | 24 ++++++++++++++++++++++++
>  1 file changed, 24 insertions(+)
> 
> diff --git a/bitbake/lib/bb/fetch2/git.py b/bitbake/lib/bb/fetch2/git.py
> index 8185bf4..d862942 100644
> --- a/bitbake/lib/bb/fetch2/git.py
> +++ b/bitbake/lib/bb/fetch2/git.py
> @@ -503,6 +503,15 @@ class Git(FetchMethod):
>  
>          repourl = self._get_repo_url(ud)
>          runfetchcmd("%s remote set-url origin %s" % (ud.basecmd, repourl), d, workdir=destdir)
> +
> +        if self._contains_lfs(ud, d, destdir):
> +            origbbenv = d.getVar("BB_ORIGENV", False)
> +            path = origbbenv.getVar("PATH")
> +            gitlfstool = bb.utils.which(path, "git-lfs", executable=True)
> +            if not gitlfstool:
> +                raise bb.fetch2.FetchError("Repository %s has lfs content, install git-lfs plugin on host to download" % (repourl))

Can we just rely on the usual PATH here please, I don't think we need
to touch BB_ORIGENV? We can assume the environment will be setup with
git-lfs if its present.

> +
>          if not ud.nocheckout:
>              if subdir != "":
>                  runfetchcmd("%s read-tree %s%s" % (ud.basecmd, ud.revisions[ud.names[0]], readpathspec), d,
> @@ -553,6 +562,21 @@ class Git(FetchMethod):
>              raise bb.fetch2.FetchError("The command '%s' gave output with more then 1 line unexpectedly, output: '%s'" % (cmd, output))
>          return output.split()[0] != "0"
>  
> +    def _contains_lfs(self, ud, d, wd):
> +        """
> +        Check git lfs repository

If we're going to add a comment, please make it useful, e.g.

Check if the repository has 'lfs' (large file) content

> +        """
> +        cmd = "%s grep lfs HEAD:.gitattributes | wc -l" % (
> +                ud.basecmd)
> +        try:
> +            output = runfetchcmd(cmd, d, quiet=True, workdir=wd)
> +        except bb.fetch2.FetchError:
> +            return False
> +        if int(output) > 0:
> +            return True
> +        else:
> +            return False

Can be slightly simplified to:

        try:
            output = runfetchcmd(cmd, d, quiet=True, workdir=wd)
            if int(output) > 0:
               return True
        except
bb.fetch2.FetchError:
            pass
        return False

I did wonder if we could/should also catch an exception if the output
can't be turned into an int for some reason with:

        except bb.fetch2.FetchError, ValueError:

Cheers,

Richard



More information about the Openembedded-core mailing list