Skip to content

Commit

Permalink
fix: catch missing arg if using {prepare-}commit-msg stage
Browse files Browse the repository at this point in the history
If using the prepare-commit-msg and commit-msg stages specifically (such
    as with the try-repo command), the `--commit-msg-filename` arg must be
provided.

[fixes pre-commit#1336]

chore: improve error message for hook stage check
  • Loading branch information
particledecay authored and asottile committed Feb 23, 2020
1 parent 1c641b1 commit 5258dce
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 8 deletions.
9 changes: 9 additions & 0 deletions pre_commit/commands/run.py
Expand Up @@ -306,6 +306,15 @@ def run(
f'`git add {config_file}` to fix this.',
)
return 1
if (
args.hook_stage in {'prepare-commit-msg', 'commit-msg'} and
not args.commit_msg_filename
):
logger.error(
f'`--commit-msg-filename` is required for '
f'`--hook-stage {args.hook_stage}`',
)
return 1

# Expose origin / source as environment variables for hooks to consume
if args.origin and args.source:
Expand Down
19 changes: 11 additions & 8 deletions tests/commands/run_test.py
Expand Up @@ -663,12 +663,7 @@ def test_stages(cap_out, store, repo_with_passing_hook):
'language': 'pygrep',
'stages': [stage],
}
for i, stage in enumerate(
(
'commit', 'push', 'manual', 'prepare-commit-msg',
'commit-msg',
), 1,
)
for i, stage in enumerate(('commit', 'push', 'manual'), 1)
],
}
add_config_to_repo(repo_with_passing_hook, config)
Expand All @@ -686,8 +681,6 @@ def _run_for_stage(stage):
assert _run_for_stage('commit').startswith(b'hook 1...')
assert _run_for_stage('push').startswith(b'hook 2...')
assert _run_for_stage('manual').startswith(b'hook 3...')
assert _run_for_stage('prepare-commit-msg').startswith(b'hook 4...')
assert _run_for_stage('commit-msg').startswith(b'hook 5...')


def test_commit_msg_hook(cap_out, store, commit_msg_repo):
Expand Down Expand Up @@ -819,6 +812,16 @@ def test_error_with_unstaged_config(cap_out, store, modified_config_repo):
assert ret == 1


def test_commit_msg_missing_filename(cap_out, store, repo_with_passing_hook):
args = run_opts(hook_stage='commit-msg')
ret, printed = _do_run(cap_out, store, repo_with_passing_hook, args)
assert ret == 1
assert printed == (
b'[ERROR] `--commit-msg-filename` is required for '
b'`--hook-stage commit-msg`\n'
)


@pytest.mark.parametrize(
'opts', (run_opts(all_files=True), run_opts(files=[C.CONFIG_FILE])),
)
Expand Down

0 comments on commit 5258dce

Please sign in to comment.