diff options
Diffstat (limited to 'src/buildstream/_stream.py')
-rw-r--r-- | src/buildstream/_stream.py | 37 |
1 files changed, 20 insertions, 17 deletions
diff --git a/src/buildstream/_stream.py b/src/buildstream/_stream.py index 9677a67a5..3adbca15f 100644 --- a/src/buildstream/_stream.py +++ b/src/buildstream/_stream.py @@ -173,12 +173,20 @@ class Stream: # def query_cache(self, elements): with self._context.messenger.timed_activity("Query cache", silent_nested=True): - # Artifact cache is implicitly queried on demand + # Enqueue complete build plan as this is required to determine `buildable` status. + plan = self._pipeline.plan(elements) + self._scheduler.clear_queues() + self._add_queue(PullQueue(self._scheduler, check_remotes=False)) self._add_queue(FetchQueue(self._scheduler, skip_cached=True, check_only=True)) - self._enqueue_plan(elements) + self._enqueue_plan(plan) self._run() + # In non-strict mode, the above may not calculate all strong cache keys. + if not self._context.get_strict(): + for element in plan: + element._update_cache_key_non_strict() + # shell() # # Run a shell @@ -225,12 +233,11 @@ class Stream: element = self.targets[0] element._set_required(scope) - if pull_: - self._scheduler.clear_queues() - self._add_queue(PullQueue(self._scheduler)) - plan = self._pipeline.add_elements([element], elements) - self._enqueue_plan(plan) - self._run() + self._scheduler.clear_queues() + self._add_queue(PullQueue(self._scheduler, check_remotes=pull_)) + plan = self._pipeline.add_elements([element], elements) + self._enqueue_plan(plan) + self._run() missing_deps = [dep for dep in self._pipeline.dependencies([element], scope) if not dep._cached()] if missing_deps: @@ -311,8 +318,7 @@ class Stream: # self._scheduler.clear_queues() - if self._artifacts.has_fetch_remotes(): - self._add_queue(PullQueue(self._scheduler)) + self._add_queue(PullQueue(self._scheduler)) self._add_queue(FetchQueue(self._scheduler, skip_cached=True)) @@ -552,13 +558,10 @@ class Stream: self._check_location_writable(location, force=force, tar=tar) - uncached_elts = [elt for elt in elements if not elt._cached()] - if uncached_elts and pull: - self._message(MessageType.INFO, "Attempting to fetch missing or incomplete artifact") - self._scheduler.clear_queues() - self._add_queue(PullQueue(self._scheduler)) - self._enqueue_plan(uncached_elts) - self._run(announce_session=True) + self._scheduler.clear_queues() + self._add_queue(PullQueue(self._scheduler, check_remotes=pull)) + self._enqueue_plan(elements) + self._run(announce_session=True) try: scope = { |