[oe] [PATCH] gitver.bbclass: fix git dependency tracking

Chris Larson clarson at kergoth.com
Mon Oct 26 02:34:05 UTC 2009


Good catch, looks good.

Acked-by: Chris Larson <clarson at kergoth.com>

On Sun, Oct 25, 2009 at 6:52 PM, Michael Smith <msmith at cbnco.com> wrote:
> .git/HEAD doesn't usually change on a commit, but the ref it points to
> (e.g. .git/refs/heads/master) should. Handle this and another couple of
> cases: if a tag is added without a new commit, or if the ref is in
> packed-refs.
>
> Signed-off-by: Michael Smith <msmith at cbnco.com>
> ---
>  classes/gitver.bbclass |   32 +++++++++++++++++++++-----------
>  1 files changed, 21 insertions(+), 11 deletions(-)
>
> diff --git a/classes/gitver.bbclass b/classes/gitver.bbclass
> index 92c053a..5b4ba8d 100644
> --- a/classes/gitver.bbclass
> +++ b/classes/gitver.bbclass
> @@ -8,20 +8,14 @@
>
>  GITVER = "${@get_git_pv('${S}', d)}"
>
> -def gitver_mark_dependency(d):
> -    from bb.data import expand
> -    from bb.parse import mark_dependency
> -    from os.path import abspath
> -
> -    fn = abspath(expand("${S}/.git/HEAD", d))
> -    mark_dependency(d, fn)
> -
>  def get_git_pv(path, d, tagadjust=None):
>     from subprocess import Popen, PIPE
> -    from os.path import join
> +    import os
>     from bb import error
> +    from bb.parse import mark_dependency
>
> -    env = {"GIT_DIR": join(d.getVar("S", True), ".git")}
> +    gitdir = os.path.abspath(os.path.join(d.getVar("S", True), ".git"))
> +    env = { "GIT_DIR": gitdir }
>
>     def popen(cmd, **kwargs):
>         kwargs["stderr"] = PIPE
> @@ -39,7 +33,23 @@ def get_git_pv(path, d, tagadjust=None):
>             return
>         return stdout.rstrip()
>
> -    gitver_mark_dependency(d)
> +    # Force the recipe to be reparsed so the version gets bumped
> +    # if the active branch is switched, or if the branch changes.
> +    mark_dependency(d, os.path.join(gitdir, "HEAD"))
> +
> +    ref = popen(["git", "symbolic-ref", "HEAD"])
> +    reffile = os.path.join(gitdir, ref)
> +    if ref and os.path.exists(reffile):
> +        mark_dependency(d, reffile)
> +    else:
> +        # The ref might be hidden in packed-refs. Force a reparse if anything
> +        # in the working copy changes.
> +        mark_dependency(d, os.path.join(gitdir, "index"))
> +
> +    # Catch new tags.
> +    tagdir = os.path.join(gitdir, "refs", "tags")
> +    if os.path.exists(tagdir):
> +        mark_dependency(d, tagdir)
>
>     ver = popen(["git", "describe", "--tags"], cwd=path)
>     if not ver:
> --
> 1.6.3
>
>
> _______________________________________________
> Openembedded-devel mailing list
> Openembedded-devel at lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-devel
>



-- 
Chris Larson
clarson at kergoth dot com
clarson at mvista dot com
Founder - BitBake, OpenEmbedded, OpenZaurus
Maintainer - Tslib
Software Engineer
MontaVista Software, Inc.




More information about the Openembedded-devel mailing list