commit: dfa317d0b8572a6c463ad5e778a8ca4633086f1b Author: Zac Medico <zmedico <AT> gentoo <DOT> org> AuthorDate: Sun Mar 26 23:54:04 2017 +0000 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org> CommitDate: Mon Mar 27 02:07:23 2017 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=dfa317d0
emerge: use asyncio interfaces for spinner during owner lookup (bug 591760) X-Gentoo-bug: 591760 X-Gentoo-bug-url: https://bugs.gentoo.org/show_bug.cgi?id=591760 Acked-by: Brian Dolbec <dolsen <AT> gentoo.org> pym/_emerge/depgraph.py | 13 ++++++++----- pym/portage/dbapi/vartree.py | 22 +++++++++------------- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py index 7c9130b38..04e724d8d 100644 --- a/pym/_emerge/depgraph.py +++ b/pym/_emerge/depgraph.py @@ -3668,17 +3668,20 @@ class depgraph(object): def select_files(self, args): # Use the global event loop for spinner progress # indication during file owner lookups (bug #461412). - spinner_id = None + def spinner_cb(): + self._frozen_config.spinner.update() + spinner_cb.handle = self._event_loop.call_soon(spinner_cb) + + spinner_cb.handle = None try: spinner = self._frozen_config.spinner if spinner is not None and \ spinner.update is not spinner.update_quiet: - spinner_id = self._event_loop.idle_add( - self._frozen_config.spinner.update) + spinner_cb.handle = self._event_loop.call_soon(spinner_cb) return self._select_files(args) finally: - if spinner_id is not None: - self._event_loop.source_remove(spinner_id) + if spinner_cb.handle is not None: + spinner_cb.handle.cancel() def _select_files(self, myfiles): """Given a list of .tbz2s, .ebuilds sets, and deps, populate diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index c421dc50b..7c8f150bb 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -1369,32 +1369,28 @@ class vardbapi(dbapi): global_event_loop() or EventLoop(main=False)) root = self._vardb._eroot - def search_pkg(cpv): + def search_pkg(cpv, search_future): dblnk = self._vardb._dblink(cpv) + results = [] for path, name, is_basename in path_info_list: if is_basename: for p in dblnk._contents.keys(): if os.path.basename(p) == name: - search_pkg.results.append((dblnk, + results.append((dblnk, dblnk._contents.unmap_key( p)[len(root):])) else: key = dblnk._match_contents(path) if key is not False: - search_pkg.results.append( + results.append( (dblnk, key[len(root):])) - search_pkg.complete = True - return False - - search_pkg.results = [] + search_future.set_result(results) for cpv in self._vardb.cpv_all(): - del search_pkg.results[:] - search_pkg.complete = False - event_loop.idle_add(search_pkg, cpv) - while not search_pkg.complete: - event_loop.iteration() - for result in search_pkg.results: + search_future = event_loop.create_future() + event_loop.call_soon(search_pkg, cpv, search_future) + event_loop.run_until_complete(search_future) + for result in search_future.result(): yield result class vartree(object):
