changeset 40019:f5a05bb48116

wireprotov2: change name and behavior of readframe() In the near future, we will want to support performing I/O from other sources. Let's rename readframe() to readdata() and tweak its logic to support future growth. Differential Revision: https://phab.mercurial-scm.org/D4771
author Gregory Szorc <gregory.szorc@gmail.com>
date Wed, 26 Sep 2018 15:53:49 -0700
parents f80db6adabbe
children ed919b90acda
files mercurial/httppeer.py mercurial/wireprotov2peer.py
diffstat 2 files changed, 16 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/httppeer.py	Wed Sep 26 16:07:59 2018 -0700
+++ b/mercurial/httppeer.py	Wed Sep 26 15:53:49 2018 -0700
@@ -712,7 +712,7 @@
     def _handleresponse(self, handler, resp):
         # Called in a thread to read the response.
 
-        while handler.readframe(resp):
+        while handler.readdata(resp):
             pass
 
 # TODO implement interface for version 2 peers
--- a/mercurial/wireprotov2peer.py	Wed Sep 26 16:07:59 2018 -0700
+++ b/mercurial/wireprotov2peer.py	Wed Sep 26 15:53:49 2018 -0700
@@ -148,6 +148,7 @@
         self._requests = {}
         self._futures = {}
         self._responses = {}
+        self._frameseof = False
 
     def callcommand(self, command, args, f):
         """Register a request to call a command.
@@ -180,18 +181,23 @@
 
         return meta['framegen']
 
-    def readframe(self, fh):
-        """Attempt to read and process a frame.
+    def readdata(self, framefh):
+        """Attempt to read data and do work.
 
-        Returns None if no frame was read. Presumably this means EOF.
+        Returns None if no data was read. Presumably this means we're
+        done with all read I/O.
         """
-        frame = wireprotoframing.readframe(fh)
-        if frame is None:
-            # TODO tell reactor?
-            return
+        if not self._frameseof:
+            frame = wireprotoframing.readframe(framefh)
+            if frame is None:
+                # TODO tell reactor?
+                self._frameseof = True
+            else:
+                self._ui.note(_('received %r\n') % frame)
+                self._processframe(frame)
 
-        self._ui.note(_('received %r\n') % frame)
-        self._processframe(frame)
+        if self._frameseof:
+            return None
 
         return True