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