add init-templatedir --no-allow-missing-config · zecode/pre-commit@1b435f1 · GitHub
Skip to content

Commit 1b435f1

Browse files
singergr-ctdsasottile
authored andcommitted
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.
1 parent 0e851bd commit 1b435f1

4 files changed

Lines changed: 83 additions & 2 deletions

File tree

pre_commit/commands/init_templatedir.py

Lines changed: 7 additions & 2 deletions

pre_commit/main.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,12 @@ def main(argv: Optional[Sequence[str]] = None) -> int:
245245
init_templatedir_parser.add_argument(
246246
'directory', help='The directory in which to write the hook script.',
247247
)
248+
init_templatedir_parser.add_argument(
249+
'--no-allow-missing-config',
250+
action='store_false',
251+
dest='allow_missing_config',
252+
help='Assume cloned repos should have a `pre-commit` config.',
253+
)
248254
_add_hook_type_option(init_templatedir_parser)
249255

250256
install_parser = subparsers.add_parser(
@@ -383,6 +389,7 @@ def main(argv: Optional[Sequence[str]] = None) -> int:
383389
return init_templatedir(
384390
args.config, store, args.directory,
385391
hook_types=args.hook_types,
392+
skip_on_missing_config=args.allow_missing_config,
386393
)
387394
elif args.command == 'install-hooks':
388395
return install_hooks(args.config, store)

tests/commands/init_templatedir_test.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import os.path
22
from unittest import mock
33

4+
import pytest
5+
46
import pre_commit.constants as C
57
from pre_commit.commands.init_templatedir import init_templatedir
68
from pre_commit.envcontext import envcontext
@@ -90,3 +92,49 @@ def test_init_templatedir_hookspath_set(tmpdir, tempdir_factory, store):
9092
C.CONFIG_FILE, store, target, hook_types=['pre-commit'],
9193
)
9294
assert target.join('hooks/pre-commit').exists()
95+
96+
97+
@pytest.mark.parametrize(
98+
('skip', 'commit_retcode', 'commit_output_snippet'),
99+
(
100+
(True, 0, 'Skipping `pre-commit`.'),
101+
(False, 1, f'No {C.CONFIG_FILE} file was found'),
102+
),
103+
)
104+
def test_init_templatedir_skip_on_missing_config(
105+
tmpdir,
106+
tempdir_factory,
107+
store,
108+
cap_out,
109+
skip,
110+
commit_retcode,
111+
commit_output_snippet,
112+
):
113+
target = str(tmpdir.join('tmpl'))
114+
init_git_dir = git_dir(tempdir_factory)
115+
with cwd(init_git_dir):
116+
cmd_output('git', 'config', 'init.templateDir', target)
117+
init_templatedir(
118+
C.CONFIG_FILE,
119+
store,
120+
target,
121+
hook_types=['pre-commit'],
122+
skip_on_missing_config=skip,
123+
)
124+
125+
lines = cap_out.get().splitlines()
126+
assert len(lines) == 1
127+
assert lines[0].startswith('pre-commit installed at')
128+
129+
with envcontext((('GIT_TEMPLATE_DIR', target),)):
130+
verify_git_dir = git_dir(tempdir_factory)
131+
132+
with cwd(verify_git_dir):
133+
retcode, output = git_commit(
134+
fn=cmd_output_mocked_pre_commit_home,
135+
tempdir_factory=tempdir_factory,
136+
retcode=None,
137+
)
138+
139+
assert retcode == commit_retcode
140+
assert commit_output_snippet in output

tests/main_test.py

Lines changed: 21 additions & 0 deletions

0 commit comments

Comments
 (0)