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

[buildstream] 02/05: _element.pyx: Optimize expand_splits

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

github-bot pushed a commit to branch bschubert/optimize-element-init
in repository https://gitbox.apache.org/repos/asf/buildstream.git

commit ce10465da264f69a2d68c8d6b580b85aef2edb5b
Author: Benjamin Schubert <co...@benschubert.me>
AuthorDate: Thu Oct 10 15:21:03 2019 +0100

    _element.pyx: Optimize expand_splits
    
    We don't need to create a new list when doing the expand split, we
    can just reuse the current SequenceNode.
    
    This gives another speedup to this method.
---
 src/buildstream/_element.pyx | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/src/buildstream/_element.pyx b/src/buildstream/_element.pyx
index f4e2011..388f295 100644
--- a/src/buildstream/_element.pyx
+++ b/src/buildstream/_element.pyx
@@ -14,7 +14,7 @@
 #  You should have received a copy of the GNU Lesser General Public
 #  License along with this library. If not, see <http://www.gnu.org/licenses/>.
 #
-from .node cimport MappingNode, SequenceNode
+from .node cimport MappingNode, ScalarNode, SequenceNode
 from ._variables cimport Variables
 
 
@@ -22,16 +22,18 @@ from ._variables cimport Variables
 def expand_splits(MappingNode element_public not None, Variables variables not None):
     cdef MappingNode element_bst = element_public.get_mapping('bst', default={})
     cdef MappingNode element_splits = element_bst.get_mapping('split-rules', default={})
+
     cdef str domain
     cdef list new_splits
     cdef SequenceNode splits
+    cdef ScalarNode split
 
-    # Resolve any variables in the public split rules directly
-    for domain, splits in element_splits.items():
-        new_splits = [
-            variables.subst(split.strip())
-            for split in splits.as_str_list()
-        ]
-        element_splits[domain] = new_splits
+    if element_splits:
+        # Resolve any variables in the public split rules directly
+        for domain, splits in element_splits.items():
+            for split in splits:
+                split.value = variables.subst(split.as_str())
+    else:
+        element_public['split-rules'] = {}
 
     return element_public