aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Smith <msmith@cbnco.com>2009-10-25 21:47:55 -0400
committerMichael Smith <msmith@cbnco.com>2009-10-26 07:13:51 -0400
commitdba8dec4093dc68610b762c8c7ac4e38c31cc8f9 (patch)
tree1593b05419b75181f8349341cbb53b0809a6b01b
parent1f7a632a9689fb9b6e03eefd0781f3e39c6f12e5 (diff)
downloadopenembedded-dba8dec4093dc68610b762c8c7ac4e38c31cc8f9.tar.gz
gitver.bbclass: fix git dependency tracking
.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@cbnco.com> Acked-by: Chris Larson <clarson@kergoth.com>
-rw-r--r--classes/gitver.bbclass32
1 files changed, 21 insertions, 11 deletions
diff --git a/classes/gitver.bbclass b/classes/gitver.bbclass
index 92c053ae24..5b4ba8d1e1 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: