summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJürg Billeter <j@bitron.ch>2017-07-21 13:25:40 +0200
committerJürg Billeter <j@bitron.ch>2017-07-21 13:29:05 +0200
commitcc08185235a0375cf5488e2f21be064f41cfb5ba (patch)
tree2617e64c97bc83a6cfb61d12b6da8191a34900bf
parent14a8b5aa28db973243b58a9ecb1ac9b26afa0994 (diff)
downloadbuildstream-key-calc.tar.gz
element.py: Calculate effective cache key before calling plugin methodskey-calc
-rw-r--r--buildstream/_artifactcache/artifactcache.py6
-rw-r--r--buildstream/element.py11
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)