summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpieterg <pieterg@gmx.com>2010-06-08 11:09:02 +0100
committerPhil Blundell <philb@gnu.org>2010-06-08 11:09:02 +0100
commit4711e27cc5309d484a7f142368c723a7ff3cf4e3 (patch)
treeb67d8849cff2f780f96f493bdb594b48ddfabf96
parent17bcab4c367e4ed1b964b30aef895430cab5966b (diff)
gitpkgv: new
-rw-r--r--classes/gitpkgv.bbclass41
1 files changed, 41 insertions, 0 deletions
diff --git a/classes/gitpkgv.bbclass b/classes/gitpkgv.bbclass
new file mode 100644
index 0000000000..bc1dc32561
--- /dev/null
+++ b/classes/gitpkgv.bbclass
@@ -0,0 +1,41 @@
+# gitpkgv.bbclass provides a GITPKGV variable which is a sortable version
+# with the format NN+GITHASH, to be used in PKGV, where
+#
+# NN equals the total number of revs up to SRCREV
+# GITHASH is SRCREV's (full) hash
+#
+# gitpkgv.bbclass assumes the git repository has been cloned, and contains
+# SRCREV. So ${GITPKGV} should never be used in PV, only in PKGV.
+# It can handle SRCREV = ${AUTOREV}, as well as SRCREV = "<some fixed git hash>"
+#
+# use example:
+#
+# inherit gitpkgv
+#
+# PV = "1.0+git${SRCPV}"
+# PKGV = "1.0+git${GITPKGV}"
+
+GITPKGV = "${@get_git_pkgv(d)}"
+
+def get_git_pkgv(d):
+ import os
+ import bb
+
+ urls = bb.data.getVar('SRC_URI', d, 1).split()
+
+ for url in urls:
+ (type, host, path, user, pswd, parm) = bb.decodeurl(bb.data.expand(url, d))
+ if type in ['git']:
+
+ gitsrcname = '%s%s' % (host, path.replace('/', '.'))
+ repodir = os.path.join(bb.data.expand('${GITDIR}', d), gitsrcname)
+ rev = bb.fetch.get_srcrev(d).split('+')[1]
+
+ cwd = os.getcwd()
+ os.chdir(repodir)
+ output = bb.fetch.runfetchcmd("git rev-list %s -- 2> /dev/null | wc -l" % rev, d, quiet=True)
+ os.chdir(cwd)
+
+ return "%s+%s" % (output.split()[0], rev)
+
+ return "0+0"