subrepo: use subprocess directly to avoid python 2.6 bug stable
authorPatrick Mezard <pmezard@gmail.com>
Wed, 17 Nov 2010 21:24:36 +0100
branchstable
changeset 13014 d1c52354b0a9
parent 13013 92b0d669637f
child 13015 82ca0c43bc44
subrepo: use subprocess directly to avoid python 2.6 bug Using svn subrepos on MacOSX with native python 2.6.1 results in a lot of unexpected output caused by: http://bugs.python.org/issue5099 subprocess.Popen.__del__ causes AttributeError (os module == None) Avoiding dangling Popen instance solves the issue.
mercurial/subrepo.py
--- a/mercurial/subrepo.py	Wed Nov 17 21:00:47 2010 +0100
+++ b/mercurial/subrepo.py	Wed Nov 17 21:24:36 2010 +0100
@@ -6,7 +6,7 @@
 # GNU General Public License version 2 or any later version.
 
 import errno, os, re, xml.dom.minidom, shutil, urlparse, posixpath
-import stat
+import stat, subprocess
 from i18n import _
 import config, util, node, error, cmdutil
 hg = None
@@ -481,12 +481,15 @@
         env = dict(os.environ)
         # Avoid localized output, preserve current locale for everything else.
         env['LC_MESSAGES'] = 'C'
-        write, read, err = util.popen3(cmd, env=env, newlines=True)
-        retdata = read.read()
-        err = err.read().strip()
-        if err:
-            raise util.Abort(err)
-        return retdata
+        p = subprocess.Popen(cmd, shell=True, bufsize=-1,
+                             close_fds=util.closefds,
+                             stdout=subprocess.PIPE, stderr=subprocess.PIPE,
+                             universal_newlines=True, env=env)
+        stdout, stderr = p.communicate()
+        stderr = stderr.strip()
+        if stderr:
+            raise util.Abort(stderr)
+        return stdout
 
     def _wcrev(self):
         output = self._svncommand(['info', '--xml'])