diff options
-rw-r--r-- | src/buildstream/_yaml.pyx | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/buildstream/_yaml.pyx b/src/buildstream/_yaml.pyx index 678374272..68724a54b 100644 --- a/src/buildstream/_yaml.pyx +++ b/src/buildstream/_yaml.pyx @@ -623,18 +623,21 @@ cdef list __trim_list_provenance(list value): # cpdef void node_set(Node node, object key, object value, list indices=None) except *: cdef int idx - - if type(value) is list: - value = __new_node_from_list(value) + cdef value_type = type(value) if indices: node = <Node> (<dict> node.value)[key] key = indices.pop() for idx in indices: node = <Node> (<list> node.value)[idx] - if type(value) is Node: + if value_type is Node: node.value[key] = value else: + if value_type is list: + value = __new_node_from_list(value).value + elif value_type is dict: + value = new_node_from_dict(value).value + try: # Need to do this just in case we're modifying a list old_value = <Node> node.value[key] |