[oe] [PATCH] gitpkgv.bbclass: cache GITPKGV result
Enrico Scholz
enrico.scholz at sigma-chemnitz.de
Tue Apr 26 10:45:57 UTC 2011
gitpkgv runs the 'git rev-list | wc -l' several times when processing a
package using GITPKGV. This takes ages for packages like the linux
kernel which has a) a large repository and b) lots of subpackages.
This patch caches the result of 'git rev-list' into the sources cache
directory and uses it on the next run. Because collisions of the sha1
hash are very unlikely, the git revision is used directly as the key.
Signed-off-by: Enrico Scholz <enrico.scholz at sigma-chemnitz.de>
---
classes/gitpkgv.bbclass | 29 +++++++++++++++++++++++------
1 files changed, 23 insertions(+), 6 deletions(-)
diff --git a/classes/gitpkgv.bbclass b/classes/gitpkgv.bbclass
index bedceb9..76c660b 100644
--- a/classes/gitpkgv.bbclass
+++ b/classes/gitpkgv.bbclass
@@ -50,8 +50,11 @@ def gitpkgv_drop_tag_prefix(version):
def get_git_pkgv(d, use_tags):
import os
import bb
+ from pipes import quote
urls = bb.data.getVar('SRC_URI', d, 1).split()
+ cachedir = bb.data.expand("${DL_DIR}/gitpkgv", d)
+ bb.mkdirhier(cachedir)
for url in urls:
(type, host, path, user, pswd, parm) = bb.decodeurl(bb.data.expand(url, d))
@@ -63,22 +66,36 @@ def get_git_pkgv(d, use_tags):
return None
rev = bb.fetch.get_srcrev(d).split('+')[1]
+ rev_file = os.path.join(cachedir, rev)
- cwd = os.getcwd()
- os.chdir(repodir)
+ vars = { 'repodir' : quote(repodir),
+ 'rev' : quote(rev),
+ }
- commits = bb.fetch.runfetchcmd("git rev-list %s -- 2> /dev/null | wc -l" % rev, d, quiet=True).strip()
+ if not os.path.exists(rev_file) or os.path.getsize(rev_file)==0:
+ commits = bb.fetch.runfetchcmd(
+ "cd %(repodir)s && "
+ "git rev-list %(rev)s -- 2> /dev/null | wc -l" % vars,
+ d, quiet=True).strip()
+
+ if commits != "0":
+ oe.path.remove(rev_file, recurse=False)
+ open(rev_file, "w").write("%d\n" % commits)
+ else:
+ commits = open(rev_file, "r").readline(128).strip()
if use_tags:
try:
- ver = gitpkgv_drop_tag_prefix(bb.fetch.runfetchcmd("git describe %s 2>/dev/null" % rev, d, quiet=True).strip())
+ tmp = bb.fetch.runfetchcmd(
+ "cd %(repodir)s && "
+ "git describe %(rev)s 2>/dev/null" % vars,
+ d, quiet=True).strip()
+ ver = gitpkgv_drop_tag_prefix(tmp)
except Exception:
ver = "0.0-%s-g%s" % (commits, rev[:7])
else:
ver = "%s+%s" % (commits, rev[:7])
- os.chdir(cwd)
-
return ver
return "0+0"
--
1.7.4.4
More information about the Openembedded-devel
mailing list