diff options
author | Jürg Billeter <j@bitron.ch> | 2017-07-21 13:25:40 +0200 |
---|---|---|
committer | Jürg Billeter <j@bitron.ch> | 2017-07-21 13:29:05 +0200 |
commit | cc08185235a0375cf5488e2f21be064f41cfb5ba (patch) | |
tree | 2617e64c97bc83a6cfb61d12b6da8191a34900bf | |
parent | 14a8b5aa28db973243b58a9ecb1ac9b26afa0994 (diff) | |
download | buildstream-key-calc.tar.gz |
element.py: Calculate effective cache key before calling plugin methodskey-calc
-rw-r--r-- | buildstream/_artifactcache/artifactcache.py | 6 | ||||
-rw-r--r-- | buildstream/element.py | 11 |
2 files changed, 12 insertions, 5 deletions
diff --git a/buildstream/_artifactcache/artifactcache.py b/buildstream/_artifactcache/artifactcache.py index a7208e8f2..4e0d70360 100644 --- a/buildstream/_artifactcache/artifactcache.py +++ b/buildstream/_artifactcache/artifactcache.py @@ -220,12 +220,12 @@ class ArtifactCache(): # element (Element): The Element commit an artifact for # content (str): The element's content directory # - def commit(self, element, content): + def commit(self, key, weak_key, element, content): # tag with strong cache key based on dependency versions used for the build - ref = buildref(element, element._get_cache_key_for_build()) + ref = buildref(element, key) # also store under weak cache key - weak_ref = buildref(element, element._get_cache_key(strength=_KeyStrength.WEAK)) + weak_ref = buildref(element, weak_key) _ostree.commit(self.repo, content, ref, weak_ref) diff --git a/buildstream/element.py b/buildstream/element.py index 60e81fda1..0d0a68d8a 100644 --- a/buildstream/element.py +++ b/buildstream/element.py @@ -1015,6 +1015,11 @@ class Element(Plugin): # The plugin's assemble() method may modify this, though. self.__dynamic_public = self.__public + # Calculate effective cache key before calling plugin methods + # to ensure the key is not affected by any side-effects of + # these methods + effective_cache_key = self._get_cache_key_for_build() + # Call the abstract plugin methods try: # Step 1 - Configure @@ -1067,7 +1072,7 @@ class Element(Plugin): } meta = { 'keys': { - 'strong': self._get_cache_key_for_build(), + 'strong': effective_cache_key, 'weak': self._get_cache_key(_KeyStrength.WEAK), 'dependencies': dependencies }, @@ -1077,7 +1082,9 @@ class Element(Plugin): _yaml.dump(_yaml.node_sanitize(meta), os.path.join(metadir, 'artifact.yaml')) with self.timed_activity("Caching Artifact"): - self.__artifacts.commit(self, assembledir) + self.__artifacts.commit(effective_cache_key, + self._get_cache_key(strength=_KeyStrength.WEAK), + self, assembledir) # Finally cleanup the build dir shutil.rmtree(rootdir) |