Comments
Patch
@@ -70,7 +70,14 @@
(_serverquote(remotecmd), _serverquote(self.path))))
ui.note(_('running %s\n') % cmd)
cmd = util.quotecommand(cmd)
- self.pipeo, self.pipei, self.pipee = util.popen3(cmd)
+
+ # while self.subprocess isn't used, having it allows the subprocess to
+ # to clean up correctly later
+ self.subprocess = util.popen(cmd)
+ # in and out are reversed, because it's always been that way
+ self.pipeo = self.subprocess.stdin
+ self.pipei = self.subprocess.stdout
+ self.pipee = self.subprocess.stderr
# skip any noise generated by remote shell
self._callstream("hello")
@@ -117,6 +117,14 @@
import subprocess
closefds = os.name == 'posix'
+def popen(cmd, env=None, newlines=False):
+ return subprocess.Popen(cmd, shell=True, bufsize=-1,
+ close_fds=closefds,
+ stdin=subprocess.PIPE, stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ universal_newlines=newlines,
+ env=env)
+
def popen2(cmd, env=None, newlines=False):
# Setting bufsize to -1 lets the system decide the buffer size.
# The default for bufsize is 0, meaning unbuffered. This leads to
@@ -129,12 +137,7 @@
return p.stdin, p.stdout
def popen3(cmd, env=None, newlines=False):
- p = subprocess.Popen(cmd, shell=True, bufsize=-1,
- close_fds=closefds,
- stdin=subprocess.PIPE, stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- universal_newlines=newlines,
- env=env)
+ p = popen(cmd, env, newlines)
return p.stdin, p.stdout, p.stderr
def version():