in src/buildstream/_loader/loader.py [0:0]
def get_loader(self, name, provenance_node, *, load_subprojects=True):
junction_path = name.split(":")
loader = self
#
# In this case we are attempting to load a subproject element via the
# command line instead of referencing the subproject through a project
# element or otherwise.
#
if provenance_node is None and load_subprojects:
self.project.ensure_fully_loaded()
circular_provenance_node = self._loader_search_provenances.get(name, None)
if circular_provenance_node and load_subprojects:
assert provenance_node
detail = None
if circular_provenance_node is not provenance_node:
detail = "Already searching for '{}' at: {}".format(name, circular_provenance_node.get_provenance())
raise LoadError(
"{}: Circular reference while searching for '{}'".format(provenance_node.get_provenance(), name),
LoadErrorReason.CIRCULAR_REFERENCE,
detail=detail,
)
if load_subprojects and provenance_node:
self._loader_search_provenances[name] = provenance_node
for junction_name in junction_path:
loader = loader._get_loader(junction_name, provenance_node, load_subprojects=load_subprojects)
if not loader:
# `loader` should never be None if `load_subprojects` is True
assert not load_subprojects
return None
if load_subprojects and provenance_node:
del self._loader_search_provenances[name]
return loader