Mercurial > hg
changeset 13108:dcaad69cfd6a
subrepo: use subprocess.Popen without the shell
As well as simplifying the code, this makes subprocess calls about 25% faster.
Tested on a couple linux boxes.
python -mtimeit -s'import subprocess' 'subprocess.Popen(
"git version", shell=True, stdout=subprocess.PIPE).wait()'
python -mtimeit -s'import subprocess' 'subprocess.Popen(
["git","version"], stdout=subprocess.PIPE).wait()'
author | Eric Eisner <ede@mit.edu> |
---|---|
date | Thu, 09 Dec 2010 16:52:14 -0500 |
parents | 3bc237b0eaea |
children | 53341289eaf8 |
files | mercurial/subrepo.py |
diffstat | 1 files changed, 2 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/subrepo.py Thu Dec 09 16:52:14 2010 -0500 +++ b/mercurial/subrepo.py Thu Dec 09 16:52:14 2010 -0500 @@ -484,13 +484,10 @@ def _svncommand(self, commands, filename=''): path = os.path.join(self._ctx._repo.origroot, self._path, filename) cmd = ['svn'] + commands + [path] - cmd = [util.shellquote(arg) for arg in cmd] - cmd = util.quotecommand(' '.join(cmd)) env = dict(os.environ) # Avoid localized output, preserve current locale for everything else. env['LC_MESSAGES'] = 'C' - p = subprocess.Popen(cmd, shell=True, bufsize=-1, - close_fds=util.closefds, + p = subprocess.Popen(cmd, bufsize=-1, close_fds=util.closefds, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True, env=env) stdout, stderr = p.communicate() @@ -626,12 +623,8 @@ The methods tries to call the git command. versions previor to 1.6.0 are not supported and very probably fail. """ - cmd = ['git'] + commands - cmd = [util.shellquote(arg) for arg in cmd] - cmd = util.quotecommand(' '.join(cmd)) - # print git's stderr, which is mostly progress and useful info - p = subprocess.Popen(cmd, shell=True, bufsize=-1, cwd=cwd, env=env, + p = subprocess.Popen(['git'] + commands, bufsize=-1, cwd=cwd, env=env, close_fds=util.closefds, stdout=subprocess.PIPE) if stream: