diff options
author | Darius Makovsky <traveltissues@protonmail.com> | 2019-11-07 12:24:06 +0000 |
---|---|---|
committer | Darius Makovsky <traveltissues@protonmail.com> | 2019-11-07 12:42:49 +0000 |
commit | 66c7a0523f7e229b8119cda8124e063fa3d0a409 (patch) | |
tree | 39472439e3cfaad3649009b9e042f9f7cf783746 | |
parent | b629133448cff7d6632b59b795054836edb062c2 (diff) | |
download | buildstream-traveltissues/remove-tracking-scheduled.tar.gz |
WIP Remove element.__tracking_scheduledtraveltissues/remove-tracking-scheduled
-rw-r--r-- | src/buildstream/_stream.py | 12 | ||||
-rw-r--r-- | src/buildstream/element.py | 29 |
2 files changed, 19 insertions, 22 deletions
diff --git a/src/buildstream/_stream.py b/src/buildstream/_stream.py index e89d22b03..a7bf693fe 100644 --- a/src/buildstream/_stream.py +++ b/src/buildstream/_stream.py @@ -379,7 +379,17 @@ class Stream(): # FIXME: this can be refactored after element._update_state is simplified/removed elements = [element for element in elements if element._schedule_tracking()] - self._pipeline.resolve_elements(elements) + with self._pipeline._context.messenger.simple_task("Resolving cached state", silent_nested=True) as task: + if task: + task.set_maximum_progress(self._pipeline._project.loader.loaded) + + for element in self._pipeline.dependencies(elements, Scope.ALL): + if not element._resolved_initial_state: + element._resolved_initial_state = True + element._update_ready_for_runtime_and_cached() + + if task: + task.add_current_progress() self._scheduler.clear_queues() track_queue = TrackQueue(self._scheduler) diff --git a/src/buildstream/element.py b/src/buildstream/element.py index e35192d84..764dfe1bc 100644 --- a/src/buildstream/element.py +++ b/src/buildstream/element.py @@ -264,7 +264,6 @@ class Element(Plugin): self.__consistency = Consistency.INCONSISTENT # Cached overall consistency state self.__assemble_scheduled = False # Element is scheduled to be assembled self.__assemble_done = False # Element is assembled - self.__tracking_scheduled = False # Sources are scheduled to be tracked self.__pull_done = False # Whether pull was attempted self.__cached_successfully = None # If the Element is known to be successfully cached self.__source_cached = None # If the sources are known to be successfully cached @@ -1331,32 +1330,24 @@ class Element(Plugin): # and reinterrogation of element state after tracking of elements # succeeds. # - # This method should return the value of `__tracking_scheduled` to callers - # that the element was marked for tracking. - # - # If `__tracking_scheduled` is not already determined then set it to `True` - # if at least one source advertises that it can be tracked. + # This method should return a boolean indicating whether the element can + # be tracked. This is `True` if at least one source advertises that it can + # be tracked and `False` otherwise. # # Returns: - # (bool): value of the `__tracking_scheduled` attribute + # (bool): if any source is trackable # def _schedule_tracking(self) -> bool: - # if the tracking schedule is already determined then this can be skipped - if self.__tracking_scheduled is None: - # Tracking does not make sense in cases where no sources can be tracked. - if any(source.is_trackable() for source in self.__sources): - self.__tracking_scheduled = True - return self.__tracking_scheduled + if any(source.is_trackable() for source in self.__sources): + return True + return False # _tracking_done(): # # This is called in the main process after the element has been tracked # def _tracking_done(self): - assert self.__tracking_scheduled - - self.__tracking_scheduled = False - + # FIXME: avoid unnecessary work here self._update_state() # _track(): @@ -2392,10 +2383,6 @@ class Element(Plugin): # def __update_source_state(self): - # Cannot resolve source state until tracked - if self.__tracking_scheduled: - return - self.__consistency = Consistency.CACHED workspace = self._get_workspace() |