1 |
X-Gentoo-bug: 591760 |
2 |
X-Gentoo-bug-url: https://bugs.gentoo.org/show_bug.cgi?id=591760 |
3 |
--- |
4 |
pym/_emerge/depgraph.py | 13 ++++++++----- |
5 |
pym/portage/dbapi/vartree.py | 22 +++++++++------------- |
6 |
2 files changed, 17 insertions(+), 18 deletions(-) |
7 |
|
8 |
diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py |
9 |
index 7c9130b..04e724d 100644 |
10 |
--- a/pym/_emerge/depgraph.py |
11 |
+++ b/pym/_emerge/depgraph.py |
12 |
@@ -3668,17 +3668,20 @@ class depgraph(object): |
13 |
def select_files(self, args): |
14 |
# Use the global event loop for spinner progress |
15 |
# indication during file owner lookups (bug #461412). |
16 |
- spinner_id = None |
17 |
+ def spinner_cb(): |
18 |
+ self._frozen_config.spinner.update() |
19 |
+ spinner_cb.handle = self._event_loop.call_soon(spinner_cb) |
20 |
+ |
21 |
+ spinner_cb.handle = None |
22 |
try: |
23 |
spinner = self._frozen_config.spinner |
24 |
if spinner is not None and \ |
25 |
spinner.update is not spinner.update_quiet: |
26 |
- spinner_id = self._event_loop.idle_add( |
27 |
- self._frozen_config.spinner.update) |
28 |
+ spinner_cb.handle = self._event_loop.call_soon(spinner_cb) |
29 |
return self._select_files(args) |
30 |
finally: |
31 |
- if spinner_id is not None: |
32 |
- self._event_loop.source_remove(spinner_id) |
33 |
+ if spinner_cb.handle is not None: |
34 |
+ spinner_cb.handle.cancel() |
35 |
|
36 |
def _select_files(self, myfiles): |
37 |
"""Given a list of .tbz2s, .ebuilds sets, and deps, populate |
38 |
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py |
39 |
index c421dc5..7c8f150 100644 |
40 |
--- a/pym/portage/dbapi/vartree.py |
41 |
+++ b/pym/portage/dbapi/vartree.py |
42 |
@@ -1369,32 +1369,28 @@ class vardbapi(dbapi): |
43 |
global_event_loop() or EventLoop(main=False)) |
44 |
root = self._vardb._eroot |
45 |
|
46 |
- def search_pkg(cpv): |
47 |
+ def search_pkg(cpv, search_future): |
48 |
dblnk = self._vardb._dblink(cpv) |
49 |
+ results = [] |
50 |
for path, name, is_basename in path_info_list: |
51 |
if is_basename: |
52 |
for p in dblnk._contents.keys(): |
53 |
if os.path.basename(p) == name: |
54 |
- search_pkg.results.append((dblnk, |
55 |
+ results.append((dblnk, |
56 |
dblnk._contents.unmap_key( |
57 |
p)[len(root):])) |
58 |
else: |
59 |
key = dblnk._match_contents(path) |
60 |
if key is not False: |
61 |
- search_pkg.results.append( |
62 |
+ results.append( |
63 |
(dblnk, key[len(root):])) |
64 |
- search_pkg.complete = True |
65 |
- return False |
66 |
- |
67 |
- search_pkg.results = [] |
68 |
+ search_future.set_result(results) |
69 |
|
70 |
for cpv in self._vardb.cpv_all(): |
71 |
- del search_pkg.results[:] |
72 |
- search_pkg.complete = False |
73 |
- event_loop.idle_add(search_pkg, cpv) |
74 |
- while not search_pkg.complete: |
75 |
- event_loop.iteration() |
76 |
- for result in search_pkg.results: |
77 |
+ search_future = event_loop.create_future() |
78 |
+ event_loop.call_soon(search_pkg, cpv, search_future) |
79 |
+ event_loop.run_until_complete(search_future) |
80 |
+ for result in search_future.result(): |
81 |
yield result |
82 |
|
83 |
class vartree(object): |
84 |
-- |
85 |
2.10.2 |