You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildstream.apache.org by ro...@apache.org on 2020/12/29 13:33:52 UTC

[buildstream] 02/05: element.py: Refactor `_schedule_assemble`

This is an automated email from the ASF dual-hosted git repository.

root pushed a commit to branch tlater/test_workspace_visible
in repository https://gitbox.apache.org/repos/asf/buildstream.git

commit 2f1c23413f002d73904a0df8d4218ead5508c006
Author: Tristan Maat <tr...@codethink.co.uk>
AuthorDate: Thu Oct 17 16:28:12 2019 +0100

    element.py: Refactor `_schedule_assemble`
    
    Move the logic that decides whether we can schedule an element for
    assembly *into* this function. This makes it a fair bit easier to
    grok, and reduces the complexity of `_update_state()`.
---
 src/buildstream/element.py | 27 ++++++++++++++++++++-------
 1 file changed, 20 insertions(+), 7 deletions(-)

diff --git a/src/buildstream/element.py b/src/buildstream/element.py
index 65b87e6..558bda4 100644
--- a/src/buildstream/element.py
+++ b/src/buildstream/element.py
@@ -1276,13 +1276,9 @@ class Element(Plugin):
         # If the element wasn't assembled and isn't scheduled to be assemble,
         # or cached, or waiting to be pulled but has an artifact then schedule
         # the assembly.
-        if (not self.__assemble_scheduled and not self.__assemble_done and
-                self.__artifact and
-                self._is_required() and
-                not self._cached() and
-                not self._pull_pending()):
-            self._schedule_assemble()
+        scheduled = self._schedule_assemble()
 
+        if scheduled:
             # If a build has been scheduled, we know that the element
             # is not cached and can allow cache query even if the strict cache
             # key is not available yet.
@@ -1563,7 +1559,22 @@ class Element(Plugin):
     # in a subprocess.
     #
     def _schedule_assemble(self):
-        assert not self.__assemble_scheduled
+        # If we're already processing, we shouldn't re-schedule
+        if self.__assemble_scheduled or self.__assemble_done or self._pull_pending():
+            return False
+
+        # If we're not part of the build pipeline, we don't need to be scheduled
+        if not self._is_required():
+            return False
+
+        # If we're already cached, we don't need to be scheduled
+        if self._cached():
+            return False
+
+        # FIXME: Why do we do this?
+        if not self.__artifact:
+            return False
+
         self.__assemble_scheduled = True
 
         # Requests artifacts of build dependencies
@@ -1579,6 +1590,8 @@ class Element(Plugin):
 
         self._update_state()
 
+        return True
+
     # _assemble_done():
     #
     # This is called in the main process after the element has been assembled