diff options
-rw-r--r-- | buildstream/_loader/loader.py | 51 |
1 files changed, 33 insertions, 18 deletions
diff --git a/buildstream/_loader/loader.py b/buildstream/_loader/loader.py index 0de0e2b9c..8dda0468e 100644 --- a/buildstream/_loader/loader.py +++ b/buildstream/_loader/loader.py @@ -99,7 +99,6 @@ class Loader(): # Returns: The toplevel LoadElement def load(self, targets, rewritable=False, ticker=None, fetch_subprojects=False): - invalid_elements = [] for filename in targets: if os.path.isabs(filename): # XXX Should this just be an assertion ? @@ -109,14 +108,8 @@ class Loader(): "path to the base project directory: {}" .format(filename, self._basedir)) - if not filename.endswith(".bst"): - invalid_elements.append(filename) + self._warn_invalid_elements(targets) - if invalid_elements: - self._warn("Target elements '{}' do not have expected file extension `.bst` " - "Improperly named elements will not be discoverable by commands" - .format(invalid_elements), - warning_token=CoreWarnings.BAD_ELEMENT_SUFFIX) # First pass, recursively load files and populate our table of LoadElements # deps = [] @@ -280,12 +273,7 @@ class Loader(): self._elements[filename] = element # Load all dependency files for the new LoadElement - invalid_elements = [] for dep in element.deps: - if not dep.name.endswith(".bst"): - invalid_elements.append(dep.name) - continue - if dep.junction: self._load_file(dep.junction, rewritable, ticker, fetch_subprojects, yaml_cache) loader = self._get_loader(dep.junction, rewritable=rewritable, ticker=ticker, @@ -300,11 +288,9 @@ class Loader(): "{}: Cannot depend on junction" .format(dep.provenance)) - if invalid_elements: - self._warn("The following dependencies do not have expected file extension `.bst`: {} " - "Improperly named elements will not be discoverable by commands" - .format(invalid_elements), - warning_token=CoreWarnings.BAD_ELEMENT_SUFFIX) + deps_names = [dep.name for dep in element.deps] + self._warn_invalid_elements(deps_names) + return element # _check_circular_deps(): @@ -679,3 +665,32 @@ class Loader(): message = Message(None, MessageType.WARN, brief) self._context.message(message) + + # Print warning messages if any of the specified elements have invalid names. + # + # Valid filenames should end with ".bst" extension. + # + # Args: + # elements (list): List of element names + # + # Raises: + # (:class:`.LoadError`): When warning_token is considered fatal by the project configuration + # + def _warn_invalid_elements(self, elements): + + # invalid_elements + # + # A dict that maps warning types to the matching elements. + invalid_elements = { + CoreWarnings.BAD_ELEMENT_SUFFIX: [], + } + + for filename in elements: + if not filename.endswith(".bst"): + invalid_elements[CoreWarnings.BAD_ELEMENT_SUFFIX].append(filename) + + if invalid_elements[CoreWarnings.BAD_ELEMENT_SUFFIX]: + self._warn("Target elements '{}' do not have expected file extension `.bst` " + "Improperly named elements will not be discoverable by commands" + .format(invalid_elements[CoreWarnings.BAD_ELEMENT_SUFFIX]), + warning_token=CoreWarnings.BAD_ELEMENT_SUFFIX) |