diff --git a/pre_commit/prefixed_command_runner.py b/pre_commit/prefixed_command_runner.py index 720bb103..2b1212a2 100644 --- a/pre_commit/prefixed_command_runner.py +++ b/pre_commit/prefixed_command_runner.py @@ -7,10 +7,6 @@ import subprocess from pre_commit.util import cmd_output -def _replace_cmd(cmd, **kwargs): - return [part.format(**kwargs) for part in cmd] - - class PrefixedCommandRunner(object): """A PrefixedCommandRunner allows you to run subprocess commands with comand substitution. @@ -37,7 +33,9 @@ class PrefixedCommandRunner(object): def run(self, cmd, **kwargs): self._create_path_if_not_exists() - replaced_cmd = _replace_cmd(cmd, prefix=self.prefix_dir) + replaced_cmd = [ + part.replace('{prefix}', self.prefix_dir) for part in cmd + ] return cmd_output(*replaced_cmd, __popen=self.__popen, **kwargs) def path(self, *parts): diff --git a/tests/prefixed_command_runner_test.py b/tests/prefixed_command_runner_test.py index b3aa6ff6..bafcae72 100644 --- a/tests/prefixed_command_runner_test.py +++ b/tests/prefixed_command_runner_test.py @@ -7,7 +7,6 @@ import mock import pytest from pre_commit import five -from pre_commit.prefixed_command_runner import _replace_cmd from pre_commit.prefixed_command_runner import PrefixedCommandRunner from pre_commit.util import CalledProcessError @@ -59,19 +58,6 @@ def makedirs_mock(): return mock.Mock(spec=os.makedirs) -@pytest.mark.parametrize(('input', 'kwargs', 'expected_output'), ( - ([], {}, []), - (['foo'], {}, ['foo']), - ([], {'foo': 'bar'}, []), - (['{foo}/baz'], {'foo': 'bar'}, ['bar/baz']), - (['foo'], {'foo': 'bar'}, ['foo']), - (['foo', '{bar}'], {'bar': 'baz'}, ['foo', 'baz']), -)) -def test_replace_cmd(input, kwargs, expected_output): - ret = _replace_cmd(input, **kwargs) - assert ret == expected_output - - @pytest.mark.parametrize(('input', 'expected_prefix'), ( norm_slash(('.', './')), norm_slash(('foo', 'foo/')), diff --git a/tests/repository_test.py b/tests/repository_test.py index bb88c87f..c91ce270 100644 --- a/tests/repository_test.py +++ b/tests/repository_test.py @@ -178,6 +178,22 @@ def test_run_hook_with_spaced_args(tempdir_factory, store): ) +@pytest.mark.integration +def test_run_hook_with_curly_braced_arguments(tempdir_factory, store): + _test_hook_repo( + tempdir_factory, store, 'arg_per_line_hooks_repo', + 'arg-per-line', + [], + b"arg: hi {1}\narg: I'm {a} problem\n", + config_kwargs={ + 'hooks': [{ + 'id': 'arg-per-line', + 'args': ['hi {1}', "I'm {a} problem"], + }] + }, + ) + + @xfailif_no_pcre_support @pytest.mark.integration def test_pcre_hook_no_match(tempdir_factory, store):