Commit c2673f4a authored by Tom Pollard's avatar Tom Pollard

element.py: Discard __artifact/__strict_artifact in update_state()

When we determine that current cache keys are to be discarded, we
should also discard the associated members for correctness. This
should act as a safeguard against accessing Artifact instances that
have discarded cache keys.

A side effect of this is the querying of element buildtree state
from cli methods on elements that don't have a cached artifact
would lead to the artifact member methods not being reachable.
Ensuring the element is cached before trying to call said accessor
methods resolves this.
parent 5790aa5b
Pipeline #57277903 passed with stages
in 77 minutes and 31 seconds
......@@ -195,17 +195,13 @@ class Artifact():
#
# Returns:
# (bool): True if artifact cached with buildtree, False if
# element not cached or missing expected buildtree.
# Note this only confirms if a buildtree is present,
# not its contents.
# missing expected buildtree. Note this only confirms
# if a buildtree is present, not its contents.
#
def cached_buildtree(self):
element = self._element
if not element._cached():
return False
key = self.get_extract_key()
if not self._artifacts.contains_subdir_artifact(element, key, 'buildtree'):
return False
......@@ -222,9 +218,6 @@ class Artifact():
#
def buildtree_exists(self):
if not self._element._cached():
return False
artifact_vdir, _ = self._get_directory()
return artifact_vdir._exists('buildtree')
......
......@@ -1183,6 +1183,8 @@ class Element(Plugin):
self.__strong_cached = None
self.__weak_cached = None
self.__build_result = None
self.__artifact = None
self.__strict_artifact = None
return
if self.__weak_cache_key is None:
......@@ -2149,6 +2151,9 @@ class Element(Plugin):
# not its contents.
#
def _cached_buildtree(self):
if not self._cached():
return False
return self.__artifact.cached_buildtree()
# _buildtree_exists()
......@@ -2157,9 +2162,13 @@ class Element(Plugin):
# whether the buildtree is present in the local cache.
#
# Returns:
# (bool): True if artifact was created with buildtree
# (bool): True if artifact was created with buildtree, False if
# element not cached or not created with a buildtree.
#
def _buildtree_exists(self):
if not self._cached():
return False
return self.__artifact.buildtree_exists()
# _cached_logs()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment