public inbox for gentoo-portage-dev@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-portage-dev] [PATCH 0/5] EbuildFetcher._get_uri_map(): fix event loop recursion (bug 653810)
@ 2018-04-22 22:30 Zac Medico
  2018-04-22 22:30 ` [gentoo-portage-dev] [PATCH 1/5] portdbapi: add async_fetch_map method " Zac Medico
                   ` (5 more replies)
  0 siblings, 6 replies; 8+ messages in thread
From: Zac Medico @ 2018-04-22 22:30 UTC (permalink / raw
  To: gentoo-portage-dev; +Cc: Zac Medico

Bug: https://bugs.gentoo.org/653810

Zac Medico (5):
  portdbapi: add async_fetch_map method (bug 653810)
  EbuildFetcher: inherit CompositeTask (bug 653810)
  EbuildFetcher: add _async_uri_map method (bug 653810)
  EbuildFetcher: use _async_uri_map in _start (bug 653810)
  EbuildFetcher: add async_already_fetched method (bug 653810)

 pym/_emerge/EbuildBuild.py    |   8 +++-
 pym/_emerge/EbuildFetcher.py  | 105 ++++++++++++++++++++++++++++++++----------
 pym/portage/dbapi/porttree.py |  75 +++++++++++++++++++++++-------
 3 files changed, 146 insertions(+), 42 deletions(-)

-- 
2.13.6



^ permalink raw reply	[flat|nested] 8+ messages in thread

* [gentoo-portage-dev] [PATCH 1/5] portdbapi: add async_fetch_map method (bug 653810)
  2018-04-22 22:30 [gentoo-portage-dev] [PATCH 0/5] EbuildFetcher._get_uri_map(): fix event loop recursion (bug 653810) Zac Medico
@ 2018-04-22 22:30 ` Zac Medico
  2018-04-22 22:30 ` [gentoo-portage-dev] [PATCH 2/5] EbuildFetcher: inherit CompositeTask " Zac Medico
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Zac Medico @ 2018-04-22 22:30 UTC (permalink / raw
  To: gentoo-portage-dev; +Cc: Zac Medico

Add a portdbapi.async_fetch_map method which is identical to the
existing portdbapi.getFetchMap method, but returns a future. This
will be used by EbuildFetcher in order to avoid event loop recursion.

Bug: https://bugs.gentoo.org/653810
---
 pym/portage/dbapi/porttree.py | 75 +++++++++++++++++++++++++++++++++----------
 1 file changed, 58 insertions(+), 17 deletions(-)

diff --git a/pym/portage/dbapi/porttree.py b/pym/portage/dbapi/porttree.py
index 951e5760a..3cd929963 100644
--- a/pym/portage/dbapi/porttree.py
+++ b/pym/portage/dbapi/porttree.py
@@ -728,25 +728,66 @@ class portdbapi(dbapi):
 			URIs.
 		@rtype: dict
 		"""
+		loop = self._event_loop
+		return loop.run_until_complete(
+			self.async_fetch_map(mypkg, useflags=useflags,
+				mytree=mytree, loop=loop))
 
-		try:
-			eapi, myuris = self.aux_get(mypkg,
-				["EAPI", "SRC_URI"], mytree=mytree)
-		except KeyError:
-			# Convert this to an InvalidDependString exception since callers
-			# already handle it.
-			raise portage.exception.InvalidDependString(
-				"getFetchMap(): aux_get() error reading "+mypkg+"; aborting.")
+	def async_fetch_map(self, mypkg, useflags=None, mytree=None, loop=None):
+		"""
+		Asynchronous form of getFetchMap.
 
-		if not eapi_is_supported(eapi):
-			# Convert this to an InvalidDependString exception
-			# since callers already handle it.
-			raise portage.exception.InvalidDependString(
-				"getFetchMap(): '%s' has unsupported EAPI: '%s'" % \
-				(mypkg, eapi))
-
-		return _parse_uri_map(mypkg, {'EAPI':eapi,'SRC_URI':myuris},
-			use=useflags)
+		@param mypkg: cpv for an ebuild
+		@type mypkg: String
+		@param useflags: a collection of enabled USE flags, for evaluation of
+			conditionals
+		@type useflags: set, or None to enable all conditionals
+		@param mytree: The canonical path of the tree in which the ebuild
+			is located, or None for automatic lookup
+		@type mypkg: String
+		@param loop: event loop (defaults to global event loop)
+		@type loop: EventLoop
+		@return: A future that results in a dict which maps each file name to
+			a set of alternative URIs.
+		@rtype: asyncio.Future (or compatible)
+		"""
+		loop = loop or global_event_loop()
+		loop = getattr(loop, '_asyncio_wrapper', loop)
+		result = loop.create_future()
+
+		def aux_get_done(aux_get_future):
+			if result.cancelled():
+				return
+			if aux_get_future.exception() is not None:
+				if isinstance(future.exception(), PortageKeyError):
+					# Convert this to an InvalidDependString exception since
+					# callers already handle it.
+					result.set_exception(portage.exception.InvalidDependString(
+						"getFetchMap(): aux_get() error reading "
+						+ mypkg + "; aborting."))
+				else:
+					result.set_exception(future.exception())
+				return
+
+			eapi, myuris = aux_get_future.result()
+
+			if not eapi_is_supported(eapi):
+				# Convert this to an InvalidDependString exception
+				# since callers already handle it.
+				result.set_exception(portage.exception.InvalidDependString(
+					"getFetchMap(): '%s' has unsupported EAPI: '%s'" % \
+					(mypkg, eapi)))
+				return
+
+			result.set_result(_parse_uri_map(mypkg,
+				{'EAPI':eapi,'SRC_URI':myuris}, use=useflags))
+
+		aux_get_future = self.async_aux_get(
+			mypkg, ["EAPI", "SRC_URI"], mytree=mytree)
+		result.add_done_callback(lambda result:
+			aux_get_future.cancel() if result.cancelled() else None)
+		aux_get_future.add_done_callback(aux_get_done)
+		return result
 
 	def getfetchsizes(self, mypkg, useflags=None, debug=0, myrepo=None):
 		# returns a filename:size dictionnary of remaining downloads
-- 
2.13.6



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [gentoo-portage-dev] [PATCH 2/5] EbuildFetcher: inherit CompositeTask (bug 653810)
  2018-04-22 22:30 [gentoo-portage-dev] [PATCH 0/5] EbuildFetcher._get_uri_map(): fix event loop recursion (bug 653810) Zac Medico
  2018-04-22 22:30 ` [gentoo-portage-dev] [PATCH 1/5] portdbapi: add async_fetch_map method " Zac Medico
@ 2018-04-22 22:30 ` Zac Medico
  2018-04-22 22:30 ` [gentoo-portage-dev] [PATCH 3/5] EbuildFetcher: add _async_uri_map method " Zac Medico
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Zac Medico @ 2018-04-22 22:30 UTC (permalink / raw
  To: gentoo-portage-dev; +Cc: Zac Medico

Make EbuildFetcher inherit CompositeTask, and move remaining code
to a _EbuildFetcherProcess class that still inherits ForkProcess.
The CompositeTask framework will be used to split EbuildFetcher
into subtasks, in order to prevent event loop recursion.

Bug: https://bugs.gentoo.org/653810
---
 pym/_emerge/EbuildFetcher.py | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/pym/_emerge/EbuildFetcher.py b/pym/_emerge/EbuildFetcher.py
index d98d00736..81eeb6dcd 100644
--- a/pym/_emerge/EbuildFetcher.py
+++ b/pym/_emerge/EbuildFetcher.py
@@ -15,12 +15,17 @@ from portage.elog.messages import eerror
 from portage.package.ebuild.fetch import _check_distfile, fetch
 from portage.util._async.ForkProcess import ForkProcess
 from portage.util._pty import _create_pty_or_pipe
+from _emerge.CompositeTask import CompositeTask
 
-class EbuildFetcher(ForkProcess):
+
+class EbuildFetcher(CompositeTask):
 
 	__slots__ = ("config_pool", "ebuild_path", "fetchonly", "fetchall",
-		"pkg", "prefetch") + \
-		("_digests", "_manifest", "_settings", "_uri_map")
+		"logfile", "pkg", "prefetch", "_fetcher_proc")
+
+	def __init__(self, **kwargs):
+		CompositeTask.__init__(self, **kwargs)
+		self._fetcher_proc = _EbuildFetcherProcess(**kwargs)
 
 	def already_fetched(self, settings):
 		"""
@@ -32,7 +37,18 @@ class EbuildFetcher(ForkProcess):
 		such messages. This will raise InvalidDependString if SRC_URI is
 		invalid.
 		"""
+		return self._fetcher_proc.already_fetched(settings)
+
+	def _start(self):
+		self._start_task(self._fetcher_proc, self._default_final_exit)
+
 
+class _EbuildFetcherProcess(ForkProcess):
+
+	__slots__ = ("config_pool", "ebuild_path", "fetchonly", "fetchall",
+		"pkg", "prefetch", "_digests", "_manifest", "_settings", "_uri_map")
+
+	def already_fetched(self, settings):
 		uri_map = self._get_uri_map()
 		if not uri_map:
 			return True
-- 
2.13.6



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [gentoo-portage-dev] [PATCH 3/5] EbuildFetcher: add _async_uri_map method (bug 653810)
  2018-04-22 22:30 [gentoo-portage-dev] [PATCH 0/5] EbuildFetcher._get_uri_map(): fix event loop recursion (bug 653810) Zac Medico
  2018-04-22 22:30 ` [gentoo-portage-dev] [PATCH 1/5] portdbapi: add async_fetch_map method " Zac Medico
  2018-04-22 22:30 ` [gentoo-portage-dev] [PATCH 2/5] EbuildFetcher: inherit CompositeTask " Zac Medico
@ 2018-04-22 22:30 ` Zac Medico
  2018-04-22 22:30 ` [gentoo-portage-dev] [PATCH 4/5] EbuildFetcher: use _async_uri_map in _start " Zac Medico
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Zac Medico @ 2018-04-22 22:30 UTC (permalink / raw
  To: gentoo-portage-dev; +Cc: Zac Medico

Add an _async_uri_map method to replace the synchronous _get_uri_map
method. This will be used to prevent event loop recursion.

Bug: https://bugs.gentoo.org/653810
---
 pym/_emerge/EbuildFetcher.py | 27 ++++++++++++++++++++-------
 1 file changed, 20 insertions(+), 7 deletions(-)

diff --git a/pym/_emerge/EbuildFetcher.py b/pym/_emerge/EbuildFetcher.py
index 81eeb6dcd..1f574740b 100644
--- a/pym/_emerge/EbuildFetcher.py
+++ b/pym/_emerge/EbuildFetcher.py
@@ -49,7 +49,7 @@ class _EbuildFetcherProcess(ForkProcess):
 		"pkg", "prefetch", "_digests", "_manifest", "_settings", "_uri_map")
 
 	def already_fetched(self, settings):
-		uri_map = self._get_uri_map()
+		uri_map = self.scheduler.run_until_complete(self._async_uri_map())
 		if not uri_map:
 			return True
 
@@ -125,7 +125,7 @@ class _EbuildFetcherProcess(ForkProcess):
 		ebuild_path = self._get_ebuild_path()
 
 		try:
-			uri_map = self._get_uri_map()
+			uri_map = self.scheduler.run_until_complete(self._async_uri_map())
 		except portage.exception.InvalidDependString as e:
 			msg_lines = []
 			msg = "Fetch failed for '%s' due to invalid SRC_URI: %s" % \
@@ -210,21 +210,34 @@ class _EbuildFetcherProcess(ForkProcess):
 			self._digests = self._get_manifest().getTypeDigests("DIST")
 		return self._digests
 
-	def _get_uri_map(self):
+	def _async_uri_map(self):
 		"""
-		This can raise InvalidDependString from portdbapi.getFetchMap().
+		This calls the portdbapi.async_fetch_map method and returns the
+		resulting Future (may contain InvalidDependString exception).
 		"""
 		if self._uri_map is not None:
-			return self._uri_map
+			result = self.scheduler.create_future()
+			result.set_result(self._uri_map)
+			return result
+
 		pkgdir = os.path.dirname(self._get_ebuild_path())
 		mytree = os.path.dirname(os.path.dirname(pkgdir))
 		use = None
 		if not self.fetchall:
 			use = self.pkg.use.enabled
 		portdb = self.pkg.root_config.trees["porttree"].dbapi
-		self._uri_map = portdb.getFetchMap(self.pkg.cpv,
+
+		def cache_result(result):
+			try:
+				self._uri_map = result.result()
+			except Exception:
+				# The caller handles this when it retrieves the result.
+				pass
+
+		result = portdb.async_fetch_map(self.pkg.cpv,
 			useflags=use, mytree=mytree)
-		return self._uri_map
+		result.add_done_callback(cache_result)
+		return result
 
 	def _prefetch_size_ok(self, uri_map, settings, ebuild_path):
 		distdir = settings["DISTDIR"]
-- 
2.13.6



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [gentoo-portage-dev] [PATCH 4/5] EbuildFetcher: use _async_uri_map in _start (bug 653810)
  2018-04-22 22:30 [gentoo-portage-dev] [PATCH 0/5] EbuildFetcher._get_uri_map(): fix event loop recursion (bug 653810) Zac Medico
                   ` (2 preceding siblings ...)
  2018-04-22 22:30 ` [gentoo-portage-dev] [PATCH 3/5] EbuildFetcher: add _async_uri_map method " Zac Medico
@ 2018-04-22 22:30 ` Zac Medico
  2018-04-22 22:30 ` [gentoo-portage-dev] [PATCH 5/5] EbuildFetcher: add async_already_fetched method " Zac Medico
  2018-04-23 16:10 ` [gentoo-portage-dev] [PATCH 0/5] EbuildFetcher._get_uri_map(): fix event loop recursion " Brian Dolbec
  5 siblings, 0 replies; 8+ messages in thread
From: Zac Medico @ 2018-04-22 22:30 UTC (permalink / raw
  To: gentoo-portage-dev; +Cc: Zac Medico

Use _async_uri_map to avoid event loop recursion in _start.

Bug: https://bugs.gentoo.org/653810
---
 pym/_emerge/EbuildFetcher.py | 34 ++++++++++++++++++++++------------
 1 file changed, 22 insertions(+), 12 deletions(-)

diff --git a/pym/_emerge/EbuildFetcher.py b/pym/_emerge/EbuildFetcher.py
index 1f574740b..8f6cc60fe 100644
--- a/pym/_emerge/EbuildFetcher.py
+++ b/pym/_emerge/EbuildFetcher.py
@@ -13,6 +13,7 @@ from portage import _unicode_decode
 from portage.checksum import _hash_filter
 from portage.elog.messages import eerror
 from portage.package.ebuild.fetch import _check_distfile, fetch
+from portage.util._async.AsyncTaskFuture import AsyncTaskFuture
 from portage.util._async.ForkProcess import ForkProcess
 from portage.util._pty import _create_pty_or_pipe
 from _emerge.CompositeTask import CompositeTask
@@ -40,6 +41,25 @@ class EbuildFetcher(CompositeTask):
 		return self._fetcher_proc.already_fetched(settings)
 
 	def _start(self):
+		self._start_task(
+			AsyncTaskFuture(future=self._fetcher_proc._async_uri_map()),
+			self._start_fetch)
+
+	def _start_fetch(self, uri_map_task):
+		self._assert_current(uri_map_task)
+		try:
+			uri_map = uri_map_task.future.result()
+		except portage.exception.InvalidDependString as e:
+			msg_lines = []
+			msg = "Fetch failed for '%s' due to invalid SRC_URI: %s" % \
+				(self.pkg.cpv, e)
+			msg_lines.append(msg)
+			self._fetcher_proc._eerror(msg_lines)
+			self._current_task = None
+			self.returncode = 1
+			self._async_wait()
+			return
+
 		self._start_task(self._fetcher_proc, self._default_final_exit)
 
 
@@ -123,18 +143,8 @@ class _EbuildFetcherProcess(ForkProcess):
 		root_config = self.pkg.root_config
 		portdb = root_config.trees["porttree"].dbapi
 		ebuild_path = self._get_ebuild_path()
-
-		try:
-			uri_map = self.scheduler.run_until_complete(self._async_uri_map())
-		except portage.exception.InvalidDependString as e:
-			msg_lines = []
-			msg = "Fetch failed for '%s' due to invalid SRC_URI: %s" % \
-				(self.pkg.cpv, e)
-			msg_lines.append(msg)
-			self._eerror(msg_lines)
-			self._set_returncode((self.pid, 1 << 8))
-			self._async_wait()
-			return
+		# This is initialized by an earlier _async_uri_map call.
+		uri_map = self._uri_map
 
 		if not uri_map:
 			# Nothing to fetch.
-- 
2.13.6



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [gentoo-portage-dev] [PATCH 5/5] EbuildFetcher: add async_already_fetched method (bug 653810)
  2018-04-22 22:30 [gentoo-portage-dev] [PATCH 0/5] EbuildFetcher._get_uri_map(): fix event loop recursion (bug 653810) Zac Medico
                   ` (3 preceding siblings ...)
  2018-04-22 22:30 ` [gentoo-portage-dev] [PATCH 4/5] EbuildFetcher: use _async_uri_map in _start " Zac Medico
@ 2018-04-22 22:30 ` Zac Medico
  2018-04-23 16:10 ` [gentoo-portage-dev] [PATCH 0/5] EbuildFetcher._get_uri_map(): fix event loop recursion " Brian Dolbec
  5 siblings, 0 replies; 8+ messages in thread
From: Zac Medico @ 2018-04-22 22:30 UTC (permalink / raw
  To: gentoo-portage-dev; +Cc: Zac Medico

Add an async_already_fetched method to replace the synchronous
already_fetched method, and use it to prevent event loop recursion.

Bug: https://bugs.gentoo.org/653810
---
 pym/_emerge/EbuildBuild.py   |  8 +++++++-
 pym/_emerge/EbuildFetcher.py | 30 ++++++++++++++++++++++++------
 2 files changed, 31 insertions(+), 7 deletions(-)

diff --git a/pym/_emerge/EbuildBuild.py b/pym/_emerge/EbuildBuild.py
index 9d4afd0ea..21c7f81ce 100644
--- a/pym/_emerge/EbuildBuild.py
+++ b/pym/_emerge/EbuildBuild.py
@@ -207,8 +207,14 @@ class EbuildBuild(CompositeTask):
 			logfile=self.settings.get('PORTAGE_LOG_FILE'),
 			pkg=self.pkg, scheduler=self.scheduler)
 
+		self._start_task(AsyncTaskFuture(
+			future=fetcher.async_already_fetched(self.settings)),
+			functools.partial(self._start_fetch, fetcher))
+
+	def _start_fetch(self, fetcher, already_fetched_task):
+		self._assert_current(already_fetched_task)
 		try:
-			already_fetched = fetcher.already_fetched(self.settings)
+			already_fetched = already_fetched_task.future.result()
 		except portage.exception.InvalidDependString as e:
 			msg_lines = []
 			msg = "Fetch failed for '%s' due to invalid SRC_URI: %s" % \
diff --git a/pym/_emerge/EbuildFetcher.py b/pym/_emerge/EbuildFetcher.py
index 8f6cc60fe..589eda85d 100644
--- a/pym/_emerge/EbuildFetcher.py
+++ b/pym/_emerge/EbuildFetcher.py
@@ -28,7 +28,7 @@ class EbuildFetcher(CompositeTask):
 		CompositeTask.__init__(self, **kwargs)
 		self._fetcher_proc = _EbuildFetcherProcess(**kwargs)
 
-	def already_fetched(self, settings):
+	def async_already_fetched(self, settings):
 		"""
 		Returns True if all files already exist locally and have correct
 		digests, otherwise return False. When returning True, appropriate
@@ -38,7 +38,7 @@ class EbuildFetcher(CompositeTask):
 		such messages. This will raise InvalidDependString if SRC_URI is
 		invalid.
 		"""
-		return self._fetcher_proc.already_fetched(settings)
+		return self._fetcher_proc.async_already_fetched(settings)
 
 	def _start(self):
 		self._start_task(
@@ -68,11 +68,29 @@ class _EbuildFetcherProcess(ForkProcess):
 	__slots__ = ("config_pool", "ebuild_path", "fetchonly", "fetchall",
 		"pkg", "prefetch", "_digests", "_manifest", "_settings", "_uri_map")
 
-	def already_fetched(self, settings):
-		uri_map = self.scheduler.run_until_complete(self._async_uri_map())
-		if not uri_map:
-			return True
+	def async_already_fetched(self, settings):
+		result = self.scheduler.create_future()
+
+		def uri_map_done(uri_map_future):
+			if uri_map_future.exception() is not None or result.cancelled():
+				if not result.cancelled():
+					result.set_exception(uri_map_future.exception())
+				return
+
+			uri_map = uri_map_future.result()
+			if uri_map:
+				result.set_result(
+					self._check_already_fetched(settings, uri_map))
+			else:
+				result.set_result(True)
+
+		uri_map_future = self._async_uri_map()
+		result.add_done_callback(lambda result:
+			aux_get_future.cancel() if result.cancelled() else None)
+		uri_map_future.add_done_callback(uri_map_done)
+		return result
 
+	def _check_already_fetched(self, settings, uri_map):
 		digests = self._get_digests()
 		distdir = settings["DISTDIR"]
 		allow_missing = self._get_manifest().allow_missing
-- 
2.13.6



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [gentoo-portage-dev] [PATCH 0/5] EbuildFetcher._get_uri_map(): fix event loop recursion (bug 653810)
  2018-04-22 22:30 [gentoo-portage-dev] [PATCH 0/5] EbuildFetcher._get_uri_map(): fix event loop recursion (bug 653810) Zac Medico
                   ` (4 preceding siblings ...)
  2018-04-22 22:30 ` [gentoo-portage-dev] [PATCH 5/5] EbuildFetcher: add async_already_fetched method " Zac Medico
@ 2018-04-23 16:10 ` Brian Dolbec
  2018-04-23 18:58   ` Zac Medico
  5 siblings, 1 reply; 8+ messages in thread
From: Brian Dolbec @ 2018-04-23 16:10 UTC (permalink / raw
  To: gentoo-portage-dev

On Sun, 22 Apr 2018 15:30:09 -0700
Zac Medico <zmedico@gentoo.org> wrote:

> Bug: https://bugs.gentoo.org/653810
> 
> Zac Medico (5):
>   portdbapi: add async_fetch_map method (bug 653810)
>   EbuildFetcher: inherit CompositeTask (bug 653810)
>   EbuildFetcher: add _async_uri_map method (bug 653810)
>   EbuildFetcher: use _async_uri_map in _start (bug 653810)
>   EbuildFetcher: add async_already_fetched method (bug 653810)
> 
>  pym/_emerge/EbuildBuild.py    |   8 +++-
>  pym/_emerge/EbuildFetcher.py  | 105
> ++++++++++++++++++++++++++++++++----------
> pym/portage/dbapi/porttree.py |  75 +++++++++++++++++++++++------- 3
> files changed, 146 insertions(+), 42 deletions(-)
> 

I didn't see any errors glaring at me...  :)

looks like it should be good 

-- 
Brian Dolbec <dolsen>



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [gentoo-portage-dev] [PATCH 0/5] EbuildFetcher._get_uri_map(): fix event loop recursion (bug 653810)
  2018-04-23 16:10 ` [gentoo-portage-dev] [PATCH 0/5] EbuildFetcher._get_uri_map(): fix event loop recursion " Brian Dolbec
@ 2018-04-23 18:58   ` Zac Medico
  0 siblings, 0 replies; 8+ messages in thread
From: Zac Medico @ 2018-04-23 18:58 UTC (permalink / raw
  To: gentoo-portage-dev, Brian Dolbec

On 04/23/2018 09:10 AM, Brian Dolbec wrote:
> On Sun, 22 Apr 2018 15:30:09 -0700
> Zac Medico <zmedico@gentoo.org> wrote:
> 
>> Bug: https://bugs.gentoo.org/653810
>>
>> Zac Medico (5):
>>   portdbapi: add async_fetch_map method (bug 653810)
>>   EbuildFetcher: inherit CompositeTask (bug 653810)
>>   EbuildFetcher: add _async_uri_map method (bug 653810)
>>   EbuildFetcher: use _async_uri_map in _start (bug 653810)
>>   EbuildFetcher: add async_already_fetched method (bug 653810)
>>
>>  pym/_emerge/EbuildBuild.py    |   8 +++-
>>  pym/_emerge/EbuildFetcher.py  | 105
>> ++++++++++++++++++++++++++++++++----------
>> pym/portage/dbapi/porttree.py |  75 +++++++++++++++++++++++------- 3
>> files changed, 146 insertions(+), 42 deletions(-)
>>
> 
> I didn't see any errors glaring at me...  :)
> 
> looks like it should be good 

Thanks, merged:

https://gitweb.gentoo.org/proj/portage.git/commit/?id=0a5692bd4f4ab4a54daf2ce09112617cbc21c9ad
-- 
Thanks,
Zac


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2018-04-23 18:58 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-04-22 22:30 [gentoo-portage-dev] [PATCH 0/5] EbuildFetcher._get_uri_map(): fix event loop recursion (bug 653810) Zac Medico
2018-04-22 22:30 ` [gentoo-portage-dev] [PATCH 1/5] portdbapi: add async_fetch_map method " Zac Medico
2018-04-22 22:30 ` [gentoo-portage-dev] [PATCH 2/5] EbuildFetcher: inherit CompositeTask " Zac Medico
2018-04-22 22:30 ` [gentoo-portage-dev] [PATCH 3/5] EbuildFetcher: add _async_uri_map method " Zac Medico
2018-04-22 22:30 ` [gentoo-portage-dev] [PATCH 4/5] EbuildFetcher: use _async_uri_map in _start " Zac Medico
2018-04-22 22:30 ` [gentoo-portage-dev] [PATCH 5/5] EbuildFetcher: add async_already_fetched method " Zac Medico
2018-04-23 16:10 ` [gentoo-portage-dev] [PATCH 0/5] EbuildFetcher._get_uri_map(): fix event loop recursion " Brian Dolbec
2018-04-23 18:58   ` Zac Medico

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox