BuildStream crashes if the dependency tree is too deep
If the dependency tree depth exeeds 1000, BuildStream crashes throwing a RecursionError
.
I think it shouldn't crash but print something like The dependency tree is too deep
.
Below is the full stack trace:
[--:--:--] START Loading pipeline
Traceback (most recent call last):
File "/usr/local/bin/bst", line 11, in <module>
load_entry_point('BuildStream', 'console_scripts', 'bst')()
File "/usr/lib/python3/dist-packages/click/core.py", line 722, in __call__
return self.main(*args, **kwargs)
File "/buildstream/buildstream/_frontend/main.py", line 137, in override_main
standalone_mode=standalone_mode, **extra)
File "/usr/lib/python3/dist-packages/click/core.py", line 697, in main
rv = self.invoke(ctx)
File "/usr/lib/python3/dist-packages/click/core.py", line 1066, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/lib/python3/dist-packages/click/core.py", line 895, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/lib/python3/dist-packages/click/core.py", line 535, in invoke
return callback(*args, **kwargs)
File "/usr/lib/python3/dist-packages/click/decorators.py", line 27, in new_func
return f(get_current_context().obj, *args, **kwargs)
File "/buildstream/buildstream/_frontend/main.py", line 459, in show
app.initialize(elements, except_=except_, use_configured_remote_caches=downloadable)
File "/buildstream/buildstream/_frontend/main.py", line 864, in initialize
rewritable=rewritable)
File "/buildstream/buildstream/_pipeline.py", line 131, in __init__
meta_elements = loader.load(rewritable, None)
File "/buildstream/buildstream/_loader.py", line 225, in load
self.load_file(target, rewritable, ticker)
File "/buildstream/buildstream/_loader.py", line 282, in load_file
self.load_file(dep.name, rewritable, ticker)
File "/buildstream/buildstream/_loader.py", line 282, in load_file
self.load_file(dep.name, rewritable, ticker)
File "/buildstream/buildstream/_loader.py", line 282, in load_file
self.load_file(dep.name, rewritable, ticker)
[Previous line repeated 946 more times]
File "/buildstream/buildstream/_loader.py", line 273, in load_file
data = _yaml.load(fullpath, shortname=filename, copy_tree=rewritable)
File "/buildstream/buildstream/_yaml.py", line 180, in load
return load_data(f, shortname=shortname, copy_tree=copy_tree)
File "/buildstream/buildstream/_yaml.py", line 191, in load_data
contents = yaml.load(data, yaml.loader.RoundTripLoader)
File "/usr/lib/python3/dist-packages/ruamel/yaml/main.py", line 636, in load
return loader._constructor.get_single_data() # type: ignore
File "/usr/lib/python3/dist-packages/ruamel/yaml/constructor.py", line 102, in get_single_data
node = self.composer.get_single_node()
File "/usr/lib/python3/dist-packages/ruamel/yaml/composer.py", line 75, in get_single_node
document = self.compose_document()
File "/usr/lib/python3/dist-packages/ruamel/yaml/composer.py", line 96, in compose_document
node = self.compose_node(None, None)
File "/usr/lib/python3/dist-packages/ruamel/yaml/composer.py", line 132, in compose_node
node = self.compose_mapping_node(anchor)
File "/usr/lib/python3/dist-packages/ruamel/yaml/composer.py", line 194, in compose_mapping_node
item_value = self.compose_node(node, item_key)
File "/usr/lib/python3/dist-packages/ruamel/yaml/composer.py", line 130, in compose_node
node = self.compose_sequence_node(anchor)
File "/usr/lib/python3/dist-packages/ruamel/yaml/composer.py", line 163, in compose_sequence_node
node.value.append(self.compose_node(node, index))
File "/usr/lib/python3/dist-packages/ruamel/yaml/composer.py", line 132, in compose_node
node = self.compose_mapping_node(anchor)
File "/usr/lib/python3/dist-packages/ruamel/yaml/composer.py", line 194, in compose_mapping_node
item_value = self.compose_node(node, item_key)
File "/usr/lib/python3/dist-packages/ruamel/yaml/composer.py", line 106, in compose_node
if self.parser.check_event(AliasEvent):
File "/usr/lib/python3/dist-packages/ruamel/yaml/parser.py", line 144, in check_event
self.current_event = self.state()
File "/usr/lib/python3/dist-packages/ruamel/yaml/parser.py", line 572, in parse_block_mapping_value
if self.scanner.check_token(ValueToken):
File "/usr/lib/python3/dist-packages/ruamel/yaml/scanner.py", line 1620, in check_token
self._gather_comments()
File "/usr/lib/python3/dist-packages/ruamel/yaml/scanner.py", line 1662, in _gather_comments
self.fetch_more_tokens()
File "/usr/lib/python3/dist-packages/ruamel/yaml/scanner.py", line 304, in fetch_more_tokens
if self.check_plain():
File "/usr/lib/python3/dist-packages/ruamel/yaml/scanner.py", line 788, in check_plain
if self.scanner_processing_version == (1, 1):
File "/usr/lib/python3/dist-packages/ruamel/yaml/scanner.py", line 152, in scanner_processing_version
return self.loader.processing_version # type: ignore
File "/usr/lib/python3/dist-packages/ruamel/yaml/resolver.py", line 443, in processing_version
version = self.parser.yaml_version
RecursionError: maximum recursion depth exceeded