diff --git a/pre_commit/clientlib.py b/pre_commit/clientlib.py index 1fcce4ea..c291e1ec 100644 --- a/pre_commit/clientlib.py +++ b/pre_commit/clientlib.py @@ -79,6 +79,7 @@ MANIFEST_HOOK_DICT = cfgv.Map( cfgv.Optional('require_serial', cfgv.check_bool, False), cfgv.Optional('stages', cfgv.check_array(cfgv.check_one_of(C.STAGES)), []), cfgv.Optional('verbose', cfgv.check_bool, False), + cfgv.Optional('prepend_name', cfgv.check_bool, False), ) MANIFEST_SCHEMA = cfgv.Array(MANIFEST_HOOK_DICT) diff --git a/pre_commit/commands/run.py b/pre_commit/commands/run.py index 37f989b5..e9719ab4 100644 --- a/pre_commit/commands/run.py +++ b/pre_commit/commands/run.py @@ -218,9 +218,19 @@ def _run_single_hook( if files_modified: _subtle_line('- files were modified by this hook', use_color) - if out.strip(): + hook_output = out.strip() + if hook_output: + if hook.prepend_name: + # Prepends the hook name to each line of its console output + hook_output = b'\n'.join( + [ + bytes(f'{hook.name}: ', encoding='utf8') + line + for line in hook_output.split(b'\n') + ], + ) + output.write_line() - output.write_line_b(out.strip(), logfile_name=hook.log_file) + output.write_line_b(hook_output, logfile_name=hook.log_file) output.write_line() return files_modified or bool(retcode), diff_after diff --git a/pre_commit/hook.py b/pre_commit/hook.py index 202abb35..eb8d6409 100644 --- a/pre_commit/hook.py +++ b/pre_commit/hook.py @@ -35,6 +35,7 @@ class Hook(NamedTuple): minimum_pre_commit_version: str require_serial: bool stages: Sequence[str] + prepend_name: bool verbose: bool @property diff --git a/tests/repository_test.py b/tests/repository_test.py index 01373147..92cca07f 100644 --- a/tests/repository_test.py +++ b/tests/repository_test.py @@ -1005,6 +1005,7 @@ def test_manifest_hooks(tempdir_factory, store): types_or=[], verbose=False, fail_fast=False, + prepend_name=False, )