summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Schubert <ben.c.schubert@gmail.com>2019-04-26 14:15:04 +0100
committerBenjamin Schubert <ben.c.schubert@gmail.com>2019-04-26 14:15:04 +0100
commita8eef66b125f6dcaab94d7671df101f4fbeedf65 (patch)
tree05db906d2e63b480b1c5f6925a193ac22d21d70f
parentfa4514dd65891e6bb81112134cb9b31829b86ed8 (diff)
downloadbuildstream-a8eef66b125f6dcaab94d7671df101f4fbeedf65.tar.gz
fixup! WIP; test async loader
-rw-r--r--buildstream/_loader/loader.py10
1 files changed, 7 insertions, 3 deletions
diff --git a/buildstream/_loader/loader.py b/buildstream/_loader/loader.py
index a92a63b54..4868c5c80 100644
--- a/buildstream/_loader/loader.py
+++ b/buildstream/_loader/loader.py
@@ -104,6 +104,9 @@ class Loader():
self._warn_invalid_elements(targets)
+ loop = asyncio.new_event_loop()
+ asyncio.set_event_loop(loop)
+
# First pass, recursively load files and populate our table of LoadElements
#
async def _load(target):
@@ -112,9 +115,10 @@ class Loader():
return await loader._load_file(name, rewritable, ticker, fetch_subprojects=fetch_subprojects)
target_elements_futures = asyncio.gather(*[_load(target) for target in targets])
+
try:
target_elements = asyncio.get_event_loop().run_until_complete(target_elements_futures)
- except:
+ except Exception:
target_elements_futures.cancel()
raise
# target_elements = []
@@ -432,7 +436,7 @@ class Loader():
# Return the already built one, if we already built it
meta_element = self._meta_elements.get(element.name)
if meta_element:
- return meta_element
+ return meta_element.result()
node = element.node
elt_provenance = _yaml.node_get_provenance(node)
@@ -539,7 +543,7 @@ class Loader():
return None
# meta junction element
- meta_element = self._collect_element(self._elements[filename])
+ meta_element = self._collect_element(await self._elements[filename])
if meta_element.kind != 'junction':
raise LoadError(LoadErrorReason.INVALID_DATA,
"{}{}: Expected junction but element kind is {}".format(