changeset 35973:805edf16e8e0

sshpeer: extract pipe cleanup logic to own function So it can be used outside of instantiated classes. This is needed to support pipe creation before __init__ is called. Differential Revision: https://phab.mercurial-scm.org/D2029
author Gregory Szorc <gregory.szorc@gmail.com>
date Sun, 04 Feb 2018 11:37:19 -0800
parents 31449baf0936
children 94ba29934f00
files mercurial/sshpeer.py
diffstat 1 files changed, 18 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/sshpeer.py	Sun Feb 04 19:23:40 2018 -0800
+++ b/mercurial/sshpeer.py	Sun Feb 04 11:37:19 2018 -0800
@@ -114,6 +114,23 @@
     def flush(self):
         return self._main.flush()
 
+def _cleanuppipes(ui, pipei, pipeo, pipee):
+    """Clean up pipes used by an SSH connection."""
+    if pipeo:
+        pipeo.close()
+    if pipei:
+        pipei.close()
+
+    if pipee:
+        # Try to read from the err descriptor until EOF.
+        try:
+            for l in pipee:
+                ui.status(_('remote: '), l)
+        except (IOError, ValueError):
+            pass
+
+        pipee.close()
+
 class sshpeer(wireproto.wirepeer):
     def __init__(self, ui, path, create=False, sshstate=None):
         self._url = path
@@ -221,17 +238,7 @@
         raise exception
 
     def _cleanup(self):
-        if self._pipeo is None:
-            return
-        self._pipeo.close()
-        self._pipei.close()
-        try:
-            # read the error descriptor until EOF
-            for l in self._pipee:
-                self.ui.status(_("remote: "), l)
-        except (IOError, ValueError):
-            pass
-        self._pipee.close()
+        _cleanuppipes(self.ui, self._pipei, self._pipeo, self._pipee)
 
     __del__ = _cleanup