add init-templatedir --no-allow-missing-config

Add a `--no-allow-missing-config` option to the `init-templatedir`
command. Enable configuration of a Git template that requires newly
cloned repos to have a `pre-commit` config.
This commit is contained in:
Greg Singer 2020-07-19 16:37:44 -05:00 committed by Anthony Sottile
parent 0e851bdf75
commit 1b435f1f1f
4 changed files with 83 additions and 2 deletions

View file

@ -1,6 +1,8 @@
import os.path
from unittest import mock
import pytest
import pre_commit.constants as C
from pre_commit.commands.init_templatedir import init_templatedir
from pre_commit.envcontext import envcontext
@ -90,3 +92,49 @@ def test_init_templatedir_hookspath_set(tmpdir, tempdir_factory, store):
C.CONFIG_FILE, store, target, hook_types=['pre-commit'],
)
assert target.join('hooks/pre-commit').exists()
@pytest.mark.parametrize(
('skip', 'commit_retcode', 'commit_output_snippet'),
(
(True, 0, 'Skipping `pre-commit`.'),
(False, 1, f'No {C.CONFIG_FILE} file was found'),
),
)
def test_init_templatedir_skip_on_missing_config(
tmpdir,
tempdir_factory,
store,
cap_out,
skip,
commit_retcode,
commit_output_snippet,
):
target = str(tmpdir.join('tmpl'))
init_git_dir = git_dir(tempdir_factory)
with cwd(init_git_dir):
cmd_output('git', 'config', 'init.templateDir', target)
init_templatedir(
C.CONFIG_FILE,
store,
target,
hook_types=['pre-commit'],
skip_on_missing_config=skip,
)
lines = cap_out.get().splitlines()
assert len(lines) == 1
assert lines[0].startswith('pre-commit installed at')
with envcontext((('GIT_TEMPLATE_DIR', target),)):
verify_git_dir = git_dir(tempdir_factory)
with cwd(verify_git_dir):
retcode, output = git_commit(
fn=cmd_output_mocked_pre_commit_home,
tempdir_factory=tempdir_factory,
retcode=None,
)
assert retcode == commit_retcode
assert commit_output_snippet in output

View file

@ -159,7 +159,28 @@ def test_try_repo(mock_store_dir):
def test_init_templatedir(mock_store_dir):
with mock.patch.object(main, 'init_templatedir') as patch:
main.main(('init-templatedir', 'tdir'))
assert patch.call_count == 1
assert 'tdir' in patch.call_args[0]
assert patch.call_args[1]['hook_types'] == ['pre-commit']
assert patch.call_args[1]['skip_on_missing_config'] is True
def test_init_templatedir_options(mock_store_dir):
args = (
'init-templatedir',
'tdir',
'--hook-type',
'commit-msg',
'--no-allow-missing-config',
)
with mock.patch.object(main, 'init_templatedir') as patch:
main.main(args)
assert patch.call_count == 1
assert 'tdir' in patch.call_args[0]
assert patch.call_args[1]['hook_types'] == ['commit-msg']
assert patch.call_args[1]['skip_on_missing_config'] is False
def test_help_cmd_in_empty_directory(