[oe] [PATCH] gitpkgv.bbclass: cache GITPKGV result

Otavio Salvador otavio at ossystems.com.br
Tue Apr 26 16:55:18 UTC 2011


Acked-by: Otavio Salvador <otavio at ossystems.com.br>

On Tue, Apr 26, 2011 at 07:45, Enrico Scholz
<enrico.scholz at sigma-chemnitz.de> wrote:
> gitpkgv runs the 'git rev-list | wc -l' several times when processing a
> package using GITPKGV.  This takes ages for packages like the linux
> kernel which has a) a large repository and b) lots of subpackages.
>
> This patch caches the result of 'git rev-list' into the sources cache
> directory and uses it on the next run.  Because collisions of the sha1
> hash are very unlikely, the git revision is used directly as the key.
>
> Signed-off-by: Enrico Scholz <enrico.scholz at sigma-chemnitz.de>
> ---
>  classes/gitpkgv.bbclass |   29 +++++++++++++++++++++++------
>  1 files changed, 23 insertions(+), 6 deletions(-)
>
> diff --git a/classes/gitpkgv.bbclass b/classes/gitpkgv.bbclass
> index bedceb9..76c660b 100644
> --- a/classes/gitpkgv.bbclass
> +++ b/classes/gitpkgv.bbclass
> @@ -50,8 +50,11 @@ def gitpkgv_drop_tag_prefix(version):
>  def get_git_pkgv(d, use_tags):
>        import os
>        import bb
> +       from pipes import quote
>
>        urls = bb.data.getVar('SRC_URI', d, 1).split()
> +       cachedir = bb.data.expand("${DL_DIR}/gitpkgv", d)
> +       bb.mkdirhier(cachedir)
>
>        for url in urls:
>                (type, host, path, user, pswd, parm) = bb.decodeurl(bb.data.expand(url, d))
> @@ -63,22 +66,36 @@ def get_git_pkgv(d, use_tags):
>                                return None
>
>                        rev = bb.fetch.get_srcrev(d).split('+')[1]
> +                       rev_file = os.path.join(cachedir, rev)
>
> -                       cwd = os.getcwd()
> -                       os.chdir(repodir)
> +                       vars = { 'repodir' : quote(repodir),
> +                                'rev' : quote(rev),
> +                              }
>
> -                       commits = bb.fetch.runfetchcmd("git rev-list %s -- 2> /dev/null | wc -l" % rev, d, quiet=True).strip()
> +                       if not os.path.exists(rev_file) or os.path.getsize(rev_file)==0:
> +                               commits = bb.fetch.runfetchcmd(
> +                                      "cd %(repodir)s && "
> +                                      "git rev-list %(rev)s -- 2> /dev/null | wc -l" % vars,
> +                                      d, quiet=True).strip()
> +
> +                               if commits != "0":
> +                                       oe.path.remove(rev_file, recurse=False)
> +                                       open(rev_file, "w").write("%d\n" % commits)
> +                       else:
> +                               commits = open(rev_file, "r").readline(128).strip()
>
>                        if use_tags:
>                                try:
> -                                       ver = gitpkgv_drop_tag_prefix(bb.fetch.runfetchcmd("git describe %s 2>/dev/null" % rev, d, quiet=True).strip())
> +                                       tmp = bb.fetch.runfetchcmd(
> +                                       "cd %(repodir)s && "
> +                                       "git describe %(rev)s 2>/dev/null" % vars,
> +                                       d, quiet=True).strip()
> +                                       ver = gitpkgv_drop_tag_prefix(tmp)
>                                except Exception:
>                                        ver = "0.0-%s-g%s" % (commits, rev[:7])
>                        else:
>                                ver = "%s+%s" % (commits, rev[:7])
>
> -                       os.chdir(cwd)
> -
>                        return ver
>
>        return "0+0"
> --
> 1.7.4.4
>
>
> _______________________________________________
> Openembedded-devel mailing list
> Openembedded-devel at lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-devel
>



-- 
Otavio Salvador                             O.S. Systems
E-mail: otavio at ossystems.com.br  http://www.ossystems.com.br
Mobile: +55 53 9981-7854              http://projetos.ossystems.com.br




More information about the Openembedded-devel mailing list