diff options
Diffstat (limited to 'buildstream/element.py')
-rw-r--r-- | buildstream/element.py | 87 |
1 files changed, 31 insertions, 56 deletions
diff --git a/buildstream/element.py b/buildstream/element.py index ce04f8163..982fd894f 100644 --- a/buildstream/element.py +++ b/buildstream/element.py @@ -2652,24 +2652,14 @@ class Element(Plugin): # def __get_artifact_metadata_keys(self, key=None): - # Now extract it and possibly derive the key - artifact_vdir, key = self.__get_artifact_directory(key) + metadata_keys = self.__metadata_keys - # Now try the cache, once we're sure about the key - if key in self.__metadata_keys: - return (self.__metadata_keys[key]['strong'], - self.__metadata_keys[key]['weak']) + strong_key, weak_key, metadata_keys = self.__artifact.get_metadata_keys(key, metadata_keys) - # Parse the expensive yaml now and cache the result - meta_file = artifact_vdir._objpath(['meta', 'keys.yaml']) - meta = _yaml.load(meta_file, shortname='meta/keys.yaml') - strong_key = meta['strong'] - weak_key = meta['weak'] + # Update keys if needed + if metadata_keys: + self.__metadata_keys = metadata_keys - assert key in (strong_key, weak_key) - - self.__metadata_keys[strong_key] = meta - self.__metadata_keys[weak_key] = meta return (strong_key, weak_key) # __get_artifact_metadata_dependencies(): @@ -2684,21 +2674,16 @@ class Element(Plugin): # def __get_artifact_metadata_dependencies(self, key=None): - # Extract it and possibly derive the key - artifact_vdir, key = self.__get_artifact_directory(key) - - # Now try the cache, once we're sure about the key - if key in self.__metadata_dependencies: - return self.__metadata_dependencies[key] + metadata = [self.__metadata_dependencies, self.__metadata_keys] + meta, meta_deps, meta_keys = self.__artifact.get_metadata_dependencies(key, *metadata) - # Parse the expensive yaml now and cache the result - meta_file = artifact_vdir._objpath(['meta', 'dependencies.yaml']) - meta = _yaml.load(meta_file, shortname='meta/dependencies.yaml') + # Update deps if needed + if meta_deps: + self.__metadata_dependencies = meta_deps + # Update keys if needed, no need to check if deps not updated + if meta_keys: + self.__metadata_keys = meta_keys - # Cache it under both strong and weak keys - strong_key, weak_key = self.__get_artifact_metadata_keys(key) - self.__metadata_dependencies[strong_key] = meta - self.__metadata_dependencies[weak_key] = meta return meta # __get_artifact_metadata_workspaced(): @@ -2711,24 +2696,19 @@ class Element(Plugin): # Returns: # (bool): Whether the given artifact was workspaced # - def __get_artifact_metadata_workspaced(self, key=None): - # Extract it and possibly derive the key - artifact_vdir, key = self.__get_artifact_directory(key) + def __get_artifact_metadata_workspaced(self, key=None): - # Now try the cache, once we're sure about the key - if key in self.__metadata_workspaced: - return self.__metadata_workspaced[key] + metadata = [self.__metadata_workspaced, self.__metadata_keys] + workspaced, meta_workspaced, meta_keys = self.__artifact.get_metadata_workspaced(key, *metadata) - # Parse the expensive yaml now and cache the result - meta_file = artifact_vdir._objpath(['meta', 'workspaced.yaml']) - meta = _yaml.load(meta_file, shortname='meta/workspaced.yaml') - workspaced = meta['workspaced'] + # Update workspaced if needed + if meta_workspaced: + self.__metadata_workspaced = meta_workspaced + # Update keys if needed, no need to check if workspaced not updated + if meta_keys: + self.__metadata_keys = meta_keys - # Cache it under both strong and weak keys - strong_key, weak_key = self.__get_artifact_metadata_keys(key) - self.__metadata_workspaced[strong_key] = workspaced - self.__metadata_workspaced[weak_key] = workspaced return workspaced # __get_artifact_metadata_workspaced_dependencies(): @@ -2743,22 +2723,17 @@ class Element(Plugin): # def __get_artifact_metadata_workspaced_dependencies(self, key=None): - # Extract it and possibly derive the key - artifact_vdir, key = self.__get_artifact_directory(key) - - # Now try the cache, once we're sure about the key - if key in self.__metadata_workspaced_dependencies: - return self.__metadata_workspaced_dependencies[key] + metadata = [self.__metadata_workspaced_dependencies, self.__metadata_keys] + workspaced, meta_workspaced_deps,\ + meta_keys = self.__artifact.get_metadata_workspaced_dependencies(key, *metadata) - # Parse the expensive yaml now and cache the result - meta_file = artifact_vdir._objpath(['meta', 'workspaced-dependencies.yaml']) - meta = _yaml.load(meta_file, shortname='meta/workspaced-dependencies.yaml') - workspaced = meta['workspaced-dependencies'] + # Update workspaced if needed + if meta_workspaced_deps: + self.__metadata_workspaced_dependencies = meta_workspaced_deps + # Update keys if needed, no need to check if workspaced not updated + if meta_keys: + self.__metadata_keys = meta_keys - # Cache it under both strong and weak keys - strong_key, weak_key = self.__get_artifact_metadata_keys(key) - self.__metadata_workspaced_dependencies[strong_key] = workspaced - self.__metadata_workspaced_dependencies[weak_key] = workspaced return workspaced # __load_public_data(): |