Mercurial > kallithea
changeset 3397:64c194492aad beta
--version command should be safe, and bare no modifications
- improved subprocess calls error detection
- fixed I/O read on closed file errors
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Mon, 25 Feb 2013 17:16:45 +0100 |
parents | 3faf7a7eebb3 |
children | 1ca82b6a6349 |
files | rhodecode/lib/subprocessio.py rhodecode/lib/utils.py rhodecode/lib/vcs/backends/git/repository.py |
diffstat | 3 files changed, 28 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/rhodecode/lib/subprocessio.py Mon Feb 25 16:49:05 2013 +0100 +++ b/rhodecode/lib/subprocessio.py Mon Feb 25 17:16:45 2013 +0100 @@ -119,7 +119,11 @@ kr = self.keep_reading da = self.data_added go = self.go - b = s.read(cs) + + try: + b = s.read(cs) + except ValueError: + b = '' while b and go.is_set(): if len(t) > ccm: @@ -372,7 +376,9 @@ bg_out.stop() bg_err.stop() err = '%s' % ''.join(bg_err) - raise EnvironmentError("Subprocess exited due to an error:\n" + err) + if err: + raise EnvironmentError("Subprocess exited due to an error:\n" + err) + raise EnvironmentError("Subprocess exited with non 0 ret code:%s" % _returncode) self.process = _p self.output = bg_out
--- a/rhodecode/lib/utils.py Mon Feb 25 16:49:05 2013 +0100 +++ b/rhodecode/lib/utils.py Mon Feb 25 17:16:45 2013 +0100 @@ -748,7 +748,8 @@ from rhodecode.lib.vcs.backends.git.repository import GitRepository from distutils.version import StrictVersion - stdout, stderr = GitRepository._run_git_command('--version') + stdout, stderr = GitRepository._run_git_command('--version', _bare=True, + _safe=True) ver = (stdout.split(' ')[-1] or '').strip() or '0.0.0' if len(ver.split('.')) > 3:
--- a/rhodecode/lib/vcs/backends/git/repository.py Mon Feb 25 16:49:05 2013 +0100 +++ b/rhodecode/lib/vcs/backends/git/repository.py Mon Feb 25 17:16:45 2013 +0100 @@ -102,7 +102,17 @@ :param opts: env options to pass into Subprocess command """ - _copts = ['-c', 'core.quotepath=false', ] + if '_bare' in opts: + _copts = [] + del opts['_bare'] + else: + _copts = ['-c', 'core.quotepath=false', ] + safe_call = False + if '_safe' in opts: + #no exc on failure + del opts['_safe'] + safe_call = True + _str_cmd = False if isinstance(cmd, basestring): cmd = [cmd] @@ -126,9 +136,13 @@ _opts.update(opts) p = subprocessio.SubprocessIOChunker(cmd, **_opts) except (EnvironmentError, OSError), err: - log.error(traceback.format_exc()) - raise RepositoryError("Couldn't run git command (%s).\n" - "Original error was:%s" % (cmd, err)) + tb_err = ("Couldn't run git command (%s).\n" + "Original error was:%s\n" % (cmd, err)) + log.error(tb_err) + if safe_call: + return '', err + else: + raise RepositoryError(tb_err) return ''.join(p.output), ''.join(p.error)