Benjamin Schubert pushed to branch bschubert/cleanup-local-state at BuildStream / buildstream
Commits:
- 
22ca1da5
by Benjamin Schubert at 2019-02-13T10:58:16Z
- 
78d9b563
by Benjamin Schubert at 2019-02-13T10:58:16Z
4 changed files:
- buildstream/_exceptions.py
- buildstream/_loader/loader.py
- buildstream/_project.py
- buildstream/element.py
Changes:
| ... | ... | @@ -19,6 +19,7 @@ | 
| 19 | 19 |  #        Tiago Gomes <tiago gomes codethink co uk>
 | 
| 20 | 20 |  | 
| 21 | 21 |  from enum import Enum
 | 
| 22 | +import os
 | |
| 22 | 23 |  | 
| 23 | 24 |  # Disable pylint warnings for whole file here:
 | 
| 24 | 25 |  # pylint: disable=global-statement
 | 
| ... | ... | @@ -50,6 +51,9 @@ def get_last_exception(): | 
| 50 | 51 |  # Used by regression tests
 | 
| 51 | 52 |  #
 | 
| 52 | 53 |  def get_last_task_error():
 | 
| 54 | +    if 'BST_TEST_SUITE' not in os.environ:
 | |
| 55 | +        raise BstError("Getting the last task error is only supported when running tests")
 | |
| 56 | + | |
| 53 | 57 |      global _last_task_error_domain
 | 
| 54 | 58 |      global _last_task_error_reason
 | 
| 55 | 59 |  | 
| ... | ... | @@ -67,11 +71,12 @@ def get_last_task_error(): | 
| 67 | 71 |  # tests about how things failed in a machine readable way
 | 
| 68 | 72 |  #
 | 
| 69 | 73 |  def set_last_task_error(domain, reason):
 | 
| 70 | -    global _last_task_error_domain
 | |
| 71 | -    global _last_task_error_reason
 | |
| 74 | +    if 'BST_TEST_SUITE' in os.environ:
 | |
| 75 | +        global _last_task_error_domain
 | |
| 76 | +        global _last_task_error_reason
 | |
| 72 | 77 |  | 
| 73 | -    _last_task_error_domain = domain
 | |
| 74 | -    _last_task_error_reason = reason
 | |
| 78 | +        _last_task_error_domain = domain
 | |
| 79 | +        _last_task_error_reason = reason
 | |
| 75 | 80 |  | 
| 76 | 81 |  | 
| 77 | 82 |  class ErrorDomain(Enum):
 | 
| ... | ... | @@ -126,7 +131,8 @@ class BstError(Exception): | 
| 126 | 131 |          self.reason = reason
 | 
| 127 | 132 |  | 
| 128 | 133 |          # Hold on to the last raised exception for testing purposes
 | 
| 129 | -        _last_exception = self
 | |
| 134 | +        if 'BST_TEST_SUITE' in os.environ:
 | |
| 135 | +            _last_exception = self
 | |
| 130 | 136 |  | 
| 131 | 137 |  | 
| 132 | 138 |  # PluginError
 | 
| ... | ... | @@ -157,8 +157,17 @@ class Loader(): | 
| 157 | 157 |              #
 | 
| 158 | 158 |              ret.append(loader._collect_element(element))
 | 
| 159 | 159 |  | 
| 160 | +        self._clean_caches()
 | |
| 161 | + | |
| 160 | 162 |          return ret
 | 
| 161 | 163 |  | 
| 164 | +    def _clean_caches(self):
 | |
| 165 | +        for loader in self._loaders.values():
 | |
| 166 | +            loader._clean_caches()
 | |
| 167 | + | |
| 168 | +        self._meta_elements = {}
 | |
| 169 | +        self._elements = {}
 | |
| 170 | + | |
| 162 | 171 |      # cleanup():
 | 
| 163 | 172 |      #
 | 
| 164 | 173 |      # Remove temporary checkout directories of subprojects
 | 
| ... | ... | @@ -344,6 +344,8 @@ class Project(): | 
| 344 | 344 |                  for meta in meta_elements
 | 
| 345 | 345 |              ]
 | 
| 346 | 346 |  | 
| 347 | +        Element._clear_meta_elements_cache()
 | |
| 348 | + | |
| 347 | 349 |          # Now warn about any redundant source references which may have
 | 
| 348 | 350 |          # been discovered in the resolve() phase.
 | 
| 349 | 351 |          redundant_refs = Element._get_redundant_source_refs()
 | 
| ... | ... | @@ -933,6 +933,10 @@ class Element(Plugin): | 
| 933 | 933 |  | 
| 934 | 934 |          return element
 | 
| 935 | 935 |  | 
| 936 | +    @classmethod
 | |
| 937 | +    def _clear_meta_elements_cache(cls):
 | |
| 938 | +        cls.__instantiated_elements = {}
 | |
| 939 | + | |
| 936 | 940 |      # _get_redundant_source_refs()
 | 
| 937 | 941 |      #
 | 
| 938 | 942 |      # Fetches a list of (Source, ref) tuples of all the Sources
 | 
