diff options
Diffstat (limited to 'meta-oe/classes/gitver.bbclass')
-rw-r--r-- | meta-oe/classes/gitver.bbclass | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/meta-oe/classes/gitver.bbclass b/meta-oe/classes/gitver.bbclass new file mode 100644 index 0000000000..ee8323d6f4 --- /dev/null +++ b/meta-oe/classes/gitver.bbclass @@ -0,0 +1,80 @@ +# Copyright (C) 2009 Chris Larson <clarson@kergoth.com> +# Released under the MIT license (see COPYING.MIT for the terms) +# +# gitver.bbclass provides a GITVER variable which is a (fairly) sane version, +# for use in ${PV}, extracted from the ${S} git checkout, assuming it is one. +# This is most useful in concert with srctree.bbclass. + +def git_drop_tag_prefix(version): + import re + if re.match("v\d", version): + return version[1:] + else: + return version + +GIT_TAGADJUST = "git_drop_tag_prefix(version)" +GITVER = "${@get_git_pv('${S}', d, tagadjust=lambda version:${GIT_TAGADJUST})}" +GITSHA = "${@get_git_hash('${S}', d)}" + +def get_git_hash(path, d): + return oe_run(d, ["git", "rev-parse", "--short", "HEAD"], cwd=path).rstrip() + +def get_git_pv(path, d, tagadjust=None): + import os + import oe.process + + gitdir = os.path.abspath(os.path.join(d.getVar("S", True), ".git")) + def git(cmd): + try: + return oe_run(d, ["git"] + cmd, cwd=gitdir).rstrip() + except oe.process.CmdError, exc: + bb.fatal(str(exc)) + + try: + ver = oe_run(d, ["git", "describe", "--tags"], cwd=gitdir).rstrip() + except Exception, exc: + bb.fatal(str(exc)) + + if not ver: + try: + ver = get_git_hash(gitdir, d) + except Exception, exc: + bb.fatal(str(exc)) + + if ver: + return "0.0+%s" % ver + else: + return "0.0" + else: + if tagadjust: + ver = tagadjust(ver) + return ver + +def mark_recipe_dependencies(path, d): + from bb.parse import mark_dependency + + gitdir = os.path.join(path, ".git") + + # 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")) + + # Force a reparse if anything in the index changes. + mark_dependency(d, os.path.join(gitdir, "index")) + + try: + ref = oe_run(d, ["git", "symbolic-ref", "-q", "HEAD"], cwd=gitdir).rstrip() + except oe.process.CmdError: + pass + else: + if ref: + mark_dependency(d, os.path.join(gitdir, ref)) + + # Catch new tags. + tagdir = os.path.join(gitdir, "refs", "tags") + if os.path.exists(tagdir): + mark_dependency(d, tagdir) + +python () { + mark_recipe_dependencies(d.getVar("S", True), d) +} |