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

Michael Smith msmith at cbnco.com
Mon Oct 26 01:52:00 UTC 2009


.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





More information about the Openembedded-devel mailing list