--- a/hgext/convert/cvs.py Fri Oct 17 17:34:25 2008 +0200
+++ b/hgext/convert/cvs.py Sun Oct 05 21:35:26 2008 +0200
@@ -252,7 +252,7 @@
# popen2 does not support argument lists under Windows
cmd = [util.shellquote(arg) for arg in cmd]
cmd = util.quotecommand(' '.join(cmd))
- self.writep, self.readp = os.popen2(cmd, 'b')
+ self.writep, self.readp = util.popen2(cmd, 'b')
self.realroot = root
--- a/hgext/convert/subversion.py Fri Oct 17 17:34:25 2008 +0200
+++ b/hgext/convert/subversion.py Sun Oct 05 21:35:26 2008 +0200
@@ -914,7 +914,7 @@
arg = encodeargs(args)
hgexe = util.hgexecutable()
cmd = '%s debugsvnlog' % util.shellquote(hgexe)
- stdin, stdout = os.popen2(cmd, 'b')
+ stdin, stdout = util.popen2(cmd, 'b')
stdin.write(arg)
stdin.close()
return logstream(stdout)
--- a/mercurial/patch.py Fri Oct 17 17:34:25 2008 +0200
+++ b/mercurial/patch.py Sun Oct 05 21:35:26 2008 +0200
@@ -9,7 +9,7 @@
from i18n import _
from node import hex, nullid, short
import base85, cmdutil, mdiff, util, revlog, diffhelpers, copies
-import cStringIO, email.Parser, os, popen2, re, errno
+import cStringIO, email.Parser, os, re, errno
import sys, tempfile, zlib
class PatchError(Exception):
@@ -1308,7 +1308,7 @@
return
fd, name = tempfile.mkstemp(prefix="hg-patchbomb-", suffix=".txt")
try:
- p = popen2.Popen3('diffstat -p1 -w79 2>/dev/null > ' + name)
+ p = util.Popen3('diffstat -p1 -w79 2>/dev/null > ' + name)
try:
for line in patchlines:
p.tochild.write(line + "\n")
--- a/mercurial/sshrepo.py Fri Oct 17 17:34:25 2008 +0200
+++ b/mercurial/sshrepo.py Sun Oct 05 21:35:26 2008 +0200
@@ -61,7 +61,7 @@
cmd = util.quotecommand(cmd)
ui.note(_('running %s\n') % cmd)
- self.pipeo, self.pipei, self.pipee = os.popen3(cmd, 'b')
+ self.pipeo, self.pipei, self.pipee = util.popen3(cmd, 'b')
# skip any noise generated by remote shell
self.do_cmd("hello")
--- a/mercurial/util.py Fri Oct 17 17:34:25 2008 +0200
+++ b/mercurial/util.py Sun Oct 05 21:35:26 2008 +0200
@@ -50,6 +50,33 @@
return _sha1(s)
try:
+ import subprocess
+ def popen2(cmd, mode='t', bufsize=-1):
+ p = subprocess.Popen(cmd, shell=True, bufsize=bufsize, close_fds=True,
+ stdin=subprocess.PIPE, stdout=subprocess.PIPE)
+ return p.stdin, p.stdout
+ def popen3(cmd, mode='t', bufsize=-1):
+ p = subprocess.Popen(cmd, shell=True, bufsize=bufsize, close_fds=True,
+ stdin=subprocess.PIPE, stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ return p.stdin, p.stdout, p.stderr
+ def Popen3(cmd, capturestderr=False, bufsize=-1):
+ stderr = capturestderr and subprocess.PIPE or None
+ p = subprocess.Popen(cmd, shell=True, bufsize=bufsize, close_fds=True,
+ stdin=subprocess.PIPE, stdout=subprocess.PIPE,
+ stderr=stderr)
+ p.fromchild = p.stdout
+ p.tochild = p.stdin
+ p.childerr = p.stderr
+ return p
+except ImportError:
+ subprocess = None
+ import popen2 as _popen2
+ popen2 = _popen2.popen2
+ Popen3 = _popen2.Popen3
+
+
+try:
_encoding = os.environ.get("HGENCODING")
if sys.platform == 'darwin' and not _encoding:
# On darwin, getpreferredencoding ignores the locale environment and
@@ -183,7 +210,7 @@
def pipefilter(s, cmd):
'''filter string S through command CMD, returning its output'''
- (pin, pout) = os.popen2(cmd, 'b')
+ (pin, pout) = popen2(cmd, 'b')
def writer():
try:
pin.write(s)