From 95c65166b107b7366611750c020b190018393438 Mon Sep 17 00:00:00 2001 From: Matthieu Patou Date: Thu, 11 Nov 2010 22:16:06 +0300 Subject: [PATCH] Introduce a cached variant of the build farm, correct cached build to handle correctly CachedUploadBuild class --- buildfarm/__init__.py | 60 +++++++++++++++++++++++++++++++++++++++++++ buildfarm/data.py | 10 ++++++-- 2 files changed, 68 insertions(+), 2 deletions(-) diff --git a/buildfarm/__init__.py b/buildfarm/__init__.py index 13e38bb6..bf6b0b03 100644 --- a/buildfarm/__init__.py +++ b/buildfarm/__init__.py @@ -132,3 +132,63 @@ class BuildFarm(object): yield self.upload_builds.get_build(host, tree, compiler) except data.NoSuchBuildError: continue + + +class CachingBuildFarm(BuildFarm): + + def __init__(self, path=None, cachedirname=None): + self.cachedir = None + super(CachingBuildFarm, self).__init__(path) + + if cachedirname: + self.cachedir = os.path.join(self.path, cachedirname) + else: + self.cachedir = os.path.join(self.path, "toto") + self.builds = self._open_build_results() + self.upload_builds = self._open_upload_build_results() + + def _open_build_results(self): + from buildfarm import data + if not self.cachedir: + return + return data.CachingBuildResultStore(os.path.join(self.path, "data", "oldrevs"), + self.cachedir) + + def _open_upload_build_results(self): + from buildfarm import data + if not self.cachedir: + return + return data.CachingUploadBuildResultStore(os.path.join(self.path, "data", "upload"), + self.cachedir) + + def lcov_status(self, tree): + """get status of build""" + from buildfarm import data, util + cachefile = self.builds.get_lcov_cached_status(self.LCOVHOST, tree) + file = os.path.join(self.lcovdir, self.LCOVHOST, tree, "index.html") + try: + st1 = os.stat(file) + except OSError: + # File does not exist + raise data.NoSuchBuildError(tree, self.LCOVHOST, "lcov") + try: + st2 = os.stat(cachefile) + except OSError: + # file does not exist + st2 = None + + if st2 and st1.st_ctime <= st2.st_mtime: + ret = util.FileLoad(cachefile) + if ret == "": + return None + return ret + + lcov_html = util.FileLoad(file) + perc = lcov_extract_percentage(lcov_html) + if perc is None: + ret = "" + else: + ret = perc + if not self.readonly: + util.FileSave(cachefile, ret) + return perc diff --git a/buildfarm/data.py b/buildfarm/data.py index 9f7708cd..0e09b137 100644 --- a/buildfarm/data.py +++ b/buildfarm/data.py @@ -270,7 +270,10 @@ class CachingBuild(Build): to calculate.""" def revision_details(self): - cachef = self._store.cache_fname(self.tree, self.host, self.compiler, self.rev) + if self.rev: + cachef = self._store.cache_fname(self.tree, self.host, self.compiler, self.rev) + else: + cachef = self._store.cache_fname(self.tree, self.host, self.compiler) st1 = os.stat("%s.log" % self.basename) try: @@ -316,7 +319,10 @@ class CachingBuild(Build): return ret def status(self): - cachefile = self._store.cache_fname(self.tree, self.host, self.compiler, self.rev)+".status" + if self.rev: + cachefile = self._store.cache_fname(self.tree, self.host, self.compiler, self.rev)+".status" + else: + cachefile = self._store.cache_fname(self.tree, self.host, self.compiler)+".status" st1 = os.stat("%s.log" % self.basename) -- 2.34.1