summaryrefslogtreecommitdiffstats
path: root/bitbake
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2019-07-23 21:50:20 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2019-08-06 11:21:31 +0100
commit5f56244092d658764700bd2483173b6f577bba30 (patch)
tree8bec1379430ed8bd71ebcd21c528a4466d139302 /bitbake
parentdb31374efa9b0b5f545c39259e5e0aa255e70086 (diff)
downloadpoky-5f56244092d658764700bd2483173b6f577bba30.tar.gz
bitbake: cache: Add SimpleCache class
This adds a simple version of the MultiProcessCache which can be used to save and load cache data, useful for a new usecase we have in sigdata/runqueue. (Bitbake rev: 19a6e35600ae6d2d1bcecca6e68ab8c37674774e) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake')
-rw-r--r--bitbake/lib/bb/cache.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/bitbake/lib/bb/cache.py b/bitbake/lib/bb/cache.py
index ab18dd5eaa..233f994279 100644
--- a/bitbake/lib/bb/cache.py
+++ b/bitbake/lib/bb/cache.py
@@ -883,3 +883,56 @@ class MultiProcessCache(object):
883 p.dump([data, self.__class__.CACHE_VERSION]) 883 p.dump([data, self.__class__.CACHE_VERSION])
884 884
885 bb.utils.unlockfile(glf) 885 bb.utils.unlockfile(glf)
886
887
888class SimpleCache(object):
889 """
890 BitBake multi-process cache implementation
891
892 Used by the codeparser & file checksum caches
893 """
894
895 def __init__(self, version):
896 self.cachefile = None
897 self.cachedata = None
898 self.cacheversion = version
899
900 def init_cache(self, d, cache_file_name=None, defaultdata=None):
901 cachedir = (d.getVar("PERSISTENT_DIR") or
902 d.getVar("CACHE"))
903 if not cachedir:
904 return defaultdata
905
906 bb.utils.mkdirhier(cachedir)
907 self.cachefile = os.path.join(cachedir,
908 cache_file_name or self.__class__.cache_file_name)
909 logger.debug(1, "Using cache in '%s'", self.cachefile)
910
911 glf = bb.utils.lockfile(self.cachefile + ".lock")
912
913 try:
914 with open(self.cachefile, "rb") as f:
915 p = pickle.Unpickler(f)
916 data, version = p.load()
917 except:
918 bb.utils.unlockfile(glf)
919 return defaultdata
920
921 bb.utils.unlockfile(glf)
922
923 if version != self.cacheversion:
924 return defaultdata
925
926 return data
927
928 def save(self, data):
929 if not self.cachefile:
930 return
931
932 glf = bb.utils.lockfile(self.cachefile + ".lock")
933
934 with open(self.cachefile, "wb") as f:
935 p = pickle.Pickler(f, -1)
936 p.dump([data, self.cacheversion])
937
938 bb.utils.unlockfile(glf)