summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Schubert <ben.c.schubert@gmail.com>2019-07-03 12:20:27 +0100
committerBenjamin Schubert <contact@benschubert.me>2019-07-03 16:57:26 +0000
commit482221aaacf690b73d67a8c1ec4eb15686abfd5b (patch)
tree043b285ebbbc4b3574c04ae590d56a28ec4fbd38
parent3c84fc22b67ab92b6905c4797a4d7ad6ed6f4821 (diff)
downloadbuildstream-bschubert/rework-node-creations.tar.gz
_yaml: Create 'from_dict' on Node and remove node creation methodsbschubert/rework-node-creations
Using 'Node.from_dict({})' can replace new_empty_node, and the rest is not needed anymore. - Adapt all call sites
-rw-r--r--src/buildstream/_context.py2
-rw-r--r--src/buildstream/_loader/loader.py2
-rw-r--r--src/buildstream/_loader/metaelement.py10
-rw-r--r--src/buildstream/_projectrefs.py2
-rw-r--r--src/buildstream/_yaml.pyx26
-rw-r--r--src/buildstream/element.py4
-rw-r--r--tests/internals/yaml.py2
7 files changed, 16 insertions, 32 deletions
diff --git a/src/buildstream/_context.py b/src/buildstream/_context.py
index 524305177..9b0db39d7 100644
--- a/src/buildstream/_context.py
+++ b/src/buildstream/_context.py
@@ -159,7 +159,7 @@ class Context():
self._artifactcache = None
self._sourcecache = None
self._projects = []
- self._project_overrides = _yaml.new_empty_node()
+ self._project_overrides = _yaml.Node.from_dict({})
self._workspaces = None
self._workspace_project_cache = WorkspaceProjectCache()
self._log_handle = None
diff --git a/src/buildstream/_loader/loader.py b/src/buildstream/_loader/loader.py
index 73da5434a..da1e466c9 100644
--- a/src/buildstream/_loader/loader.py
+++ b/src/buildstream/_loader/loader.py
@@ -120,7 +120,7 @@ class Loader():
# Set up a dummy element that depends on all top-level targets
# to resolve potential circular dependencies between them
- dummy_target = LoadElement(_yaml.new_empty_node(), "", self)
+ dummy_target = LoadElement(_yaml.Node.from_dict({}), "", self)
dummy_target.dependencies.extend(
LoadElement.Dependency(element, Symbol.RUNTIME)
for element in target_elements
diff --git a/src/buildstream/_loader/metaelement.py b/src/buildstream/_loader/metaelement.py
index 45eb6f4d0..8214e303d 100644
--- a/src/buildstream/_loader/metaelement.py
+++ b/src/buildstream/_loader/metaelement.py
@@ -48,12 +48,12 @@ class MetaElement():
self.kind = kind
self.provenance = provenance
self.sources = sources
- self.config = config or _yaml.new_empty_node()
- self.variables = variables or _yaml.new_empty_node()
- self.environment = environment or _yaml.new_empty_node()
+ self.config = config or _yaml.Node.from_dict({})
+ self.variables = variables or _yaml.Node.from_dict({})
+ self.environment = environment or _yaml.Node.from_dict({})
self.env_nocache = env_nocache or []
- self.public = public or _yaml.new_empty_node()
- self.sandbox = sandbox or _yaml.new_empty_node()
+ self.public = public or _yaml.Node.from_dict({})
+ self.sandbox = sandbox or _yaml.Node.from_dict({})
self.build_dependencies = []
self.dependencies = []
self.first_pass = first_pass
diff --git a/src/buildstream/_projectrefs.py b/src/buildstream/_projectrefs.py
index c3e669c81..a46765250 100644
--- a/src/buildstream/_projectrefs.py
+++ b/src/buildstream/_projectrefs.py
@@ -87,7 +87,7 @@ class ProjectRefs():
# Ensure we create our toplevel entry point on the fly here
for node in [self._toplevel_node, self._toplevel_save]:
if 'projects' not in node:
- node['projects'] = _yaml.new_empty_node(ref_node=node)
+ node['projects'] = {}
# lookup_ref()
#
diff --git a/src/buildstream/_yaml.pyx b/src/buildstream/_yaml.pyx
index b717b2eb3..b67227d7b 100644
--- a/src/buildstream/_yaml.pyx
+++ b/src/buildstream/_yaml.pyx
@@ -71,7 +71,11 @@ cdef class Node:
@classmethod
def from_dict(cls, dict value):
- return _new_node_from_dict(value, Node(None, _SYNTHETIC_FILE_INDEX, 0, next_synthetic_counter()))
+ if value:
+ return _new_node_from_dict(value, Node(None, _SYNTHETIC_FILE_INDEX, 0, next_synthetic_counter()))
+ else:
+ # We got an empty dict, we can shortcut
+ return MappingNode({}, _SYNTHETIC_FILE_INDEX, 0, next_synthetic_counter())
cdef bint _walk_find(self, Node target, list path) except *:
raise NotImplementedError()
@@ -1137,26 +1141,6 @@ def new_synthetic_file(str filename, object project=None):
return node
-# new_empty_node()
-#
-# Args:
-# ref_node (Node): Optional node whose provenance should be referenced
-#
-# Returns
-# (Node): A new empty YAML mapping node
-#
-def new_empty_node(Node ref_node=None):
- if ref_node is not None:
- return MappingNode({}, ref_node.file_index, ref_node.line, next_synthetic_counter())
- else:
- return MappingNode({}, _SYNTHETIC_FILE_INDEX, 0, 0)
-
-
-# FIXME: we should never need that
-def new_empty_list_node():
- return SequenceNode([], _SYNTHETIC_FILE_INDEX, 0, 0)
-
-
# new_node_from_dict()
#
# Args:
diff --git a/src/buildstream/element.py b/src/buildstream/element.py
index 770f5df42..280eeb8f1 100644
--- a/src/buildstream/element.py
+++ b/src/buildstream/element.py
@@ -2515,7 +2515,7 @@ class Element(Plugin):
# Defaults are loaded once per class and then reused
#
if cls.__defaults is None:
- defaults = _yaml.new_empty_node()
+ defaults = _yaml.Node.from_dict({})
if plugin_conf is not None:
# Load the plugin's accompanying .yaml file if one was provided
@@ -2550,7 +2550,7 @@ class Element(Plugin):
default_env = cls.__defaults.get_mapping("environment", default={})
if meta.is_junction:
- environment = _yaml.new_empty_node()
+ environment = _yaml.Node.from_dict({})
else:
environment = project.base_environment.copy()
diff --git a/tests/internals/yaml.py b/tests/internals/yaml.py
index 69f29a573..3f6ef6cc9 100644
--- a/tests/internals/yaml.py
+++ b/tests/internals/yaml.py
@@ -521,6 +521,6 @@ def test_node_find_target_fails(datafiles):
"traversal.yaml")
loaded = _yaml.load(filename, copy_tree=True)
- brand_new = _yaml.new_empty_node()
+ brand_new = _yaml.Node.from_dict({})
assert loaded._find(brand_new) is None