From ea6ff6da24653a2a7e110b715be1007c4258fb96 Mon Sep 17 00:00:00 2001 From: James Ennis <james.ennis@codethink.com> Date: Fri, 18 Jan 2019 12:52:26 +0000 Subject: [PATCH] _stream.py: Modify behaviour of _classify_artifacts() * There is no need for this method to use a cas object. * Search for artifact globs in the project's element path * An artifact key is always 64 chars long --- buildstream/_stream.py | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/buildstream/_stream.py b/buildstream/_stream.py index 07eb442089..c49623d89d 100644 --- a/buildstream/_stream.py +++ b/buildstream/_stream.py @@ -29,7 +29,8 @@ import tempfile from contextlib import contextmanager, suppress from fnmatch import fnmatch -from ._exceptions import StreamError, ImplError, BstError, set_last_task_error +from ._artifactelement import verify_artifact_ref +from ._exceptions import StreamError, ImplError, BstError, ArtifactElementError, set_last_task_error from ._message import Message, MessageType from ._scheduler import Scheduler, SchedStatus, TrackQueue, FetchQueue, BuildQueue, PullQueue, PushQueue from ._pipeline import Pipeline, PipelineSelection @@ -1335,44 +1336,49 @@ class Stream(): # _classify_artifacts() # - # Split up a list of tagets into element names and artifact refs + # Split up a list of targets into element names and artifact refs # # Args: - # names (list): A list of targets - # cas (CASCache): The CASCache object - # project_directory (str): Absolute path to the project + # targets (list): A list of targets + # cached (list): A list of locally cached refs + # project_element_path (str): Absolute path to where the elements exist in the project # # Returns: # (list): element names present in the targets # (list): artifact refs present in the targets # - def _classify_artifacts(names, cas, project_directory): + def _classify_artifacts(self, targets, cached, project_element_path): element_targets = [] artifact_refs = [] element_globs = [] artifact_globs = [] - for name in names: - if name.endswith('.bst'): - if any(c in "*?[" for c in name): - element_globs.append(name) + for target in targets: + if target.endswith('.bst'): + if any(c in "*?[" for c in target): + element_globs.append(target) else: - element_targets.append(name) + element_targets.append(target) else: - if any(c in "*?[" for c in name): - artifact_globs.append(name) + if any(c in "*?[" for c in target): + artifact_globs.append(target) else: - artifact_refs.append(name) + try: + verify_artifact_ref(target) + except ArtifactElementError: + element_targets.append(target) + continue + artifact_refs.append(target) if element_globs: - for dirpath, _, filenames in os.walk(project_directory): + for dirpath, _, filenames in os.walk(project_element_path): for filename in filenames: - element_path = os.path.join(dirpath, filename).lstrip(project_directory).lstrip('/') + element_path = os.path.join(dirpath, filename).lstrip(project_element_path).lstrip('/') if any(fnmatch(element_path, glob) for glob in element_globs): element_targets.append(element_path) if artifact_globs: - artifact_refs.extend(ref for ref in cas.list_refs() + artifact_refs.extend(ref for ref in cached if any(fnmatch(ref, glob) for glob in artifact_globs)) return element_targets, artifact_refs -- GitLab