mirror of
https://github.com/pre-commit/pre-commit.git
synced 2026-01-13 20:40:08 -06:00
Merge pull request #372 from pre-commit/dont_crash_on_not_found_exe
Don't crash when an executable is not found
This commit is contained in:
@@ -12,6 +12,10 @@ from pre_commit import five
|
||||
printable = frozenset(string.printable)
|
||||
|
||||
|
||||
class ExecutableNotFoundError(OSError):
|
||||
pass
|
||||
|
||||
|
||||
def parse_bytesio(bytesio):
|
||||
"""Parse the shebang from a file opened for reading binary."""
|
||||
if bytesio.read(2) != b'#!':
|
||||
@@ -70,7 +74,9 @@ def normexe(orig_exe):
|
||||
if os.sep not in orig_exe:
|
||||
exe = find_executable(orig_exe)
|
||||
if exe is None:
|
||||
raise OSError('Executable {0} not found'.format(orig_exe))
|
||||
raise ExecutableNotFoundError(
|
||||
'Executable `{0}` not found'.format(orig_exe),
|
||||
)
|
||||
return exe
|
||||
else:
|
||||
return orig_exe
|
||||
|
||||
@@ -181,23 +181,26 @@ def cmd_output(*cmd, **kwargs):
|
||||
for key, value in kwargs.pop('env', {}).items()
|
||||
) or None
|
||||
|
||||
cmd = parse_shebang.normalize_cmd(cmd)
|
||||
|
||||
popen_kwargs.update(kwargs)
|
||||
proc = __popen(cmd, **popen_kwargs)
|
||||
stdout, stderr = proc.communicate()
|
||||
if encoding is not None and stdout is not None:
|
||||
stdout = stdout.decode(encoding)
|
||||
if encoding is not None and stderr is not None:
|
||||
stderr = stderr.decode(encoding)
|
||||
returncode = proc.returncode
|
||||
try:
|
||||
cmd = parse_shebang.normalize_cmd(cmd)
|
||||
except parse_shebang.ExecutableNotFoundError as e:
|
||||
returncode, stdout, stderr = (-1, e.args[0].encode('UTF-8'), b'')
|
||||
else:
|
||||
popen_kwargs.update(kwargs)
|
||||
proc = __popen(cmd, **popen_kwargs)
|
||||
stdout, stderr = proc.communicate()
|
||||
if encoding is not None and stdout is not None:
|
||||
stdout = stdout.decode(encoding)
|
||||
if encoding is not None and stderr is not None:
|
||||
stderr = stderr.decode(encoding)
|
||||
returncode = proc.returncode
|
||||
|
||||
if retcode is not None and retcode != returncode:
|
||||
raise CalledProcessError(
|
||||
returncode, cmd, retcode, output=(stdout, stderr),
|
||||
)
|
||||
|
||||
return proc.returncode, stdout, stderr
|
||||
return returncode, stdout, stderr
|
||||
|
||||
|
||||
def rmtree(path):
|
||||
|
||||
Reference in New Issue
Block a user