changeset 10199:c2e2a5e6c36b

subrepo: force en_US.UTF-8 locale when calling svn Parser only knows about en_US output. Forcing the encoding to UTF-8 might not be the best thing to do since the caller may receive some of the subversion output, but at least it should prevent conversion errors from svn client.
author Patrick Mezard <pmezard@gmail.com>
date Sat, 02 Jan 2010 16:42:00 +0100
parents c2168d170f05
children 3373ecddadba
files mercurial/subrepo.py mercurial/util.py
diffstat 2 files changed, 10 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/subrepo.py	Sat Jan 02 16:03:29 2010 +0100
+++ b/mercurial/subrepo.py	Sat Jan 02 16:42:00 2010 +0100
@@ -261,7 +261,10 @@
         cmd = ['svn'] + commands + [self._path]
         cmd = [util.shellquote(arg) for arg in cmd]
         cmd = util.quotecommand(' '.join(cmd))
-        write, read, err = util.popen3(cmd, newlines=True)
+        env = dict(os.environ)
+        for k in ('LANGUAGE', 'LANG', 'LC_ALL', 'LC_MESSAGES'):
+            env[k] = 'en_US.UTF-8'
+        write, read, err = util.popen3(cmd, env=env, newlines=True)
         retdata = read.read()
         err = err.read().strip()
         if err:
--- a/mercurial/util.py	Sat Jan 02 16:03:29 2010 +0100
+++ b/mercurial/util.py	Sat Jan 02 16:42:00 2010 +0100
@@ -39,22 +39,24 @@
 import subprocess
 closefds = os.name == 'posix'
 
-def popen2(cmd, newlines=False):
+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
     # poor performance on Mac OS X: http://bugs.python.org/issue4194
     p = subprocess.Popen(cmd, shell=True, bufsize=-1,
                          close_fds=closefds,
                          stdin=subprocess.PIPE, stdout=subprocess.PIPE,
-                         universal_newlines=newlines)
+                         universal_newlines=newlines,
+                         env=env)
     return p.stdin, p.stdout
 
-def popen3(cmd, newlines=False):
+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)
+                         universal_newlines=newlines,
+                         env=env)
     return p.stdin, p.stdout, p.stderr
 
 def version():