pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/pre-commit/pre-commit/commit/1b435f1f1fa7432cbb1b2bef61c3ec0071d036cb

origen="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-5efd63e783ac04bb.css" /> add init-templatedir --no-allow-missing-config · pre-commit/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
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,15 @@ def init_templatedir(
1515
store: Store,
1616
directory: str,
1717
hook_types: Sequence[str],
18+
skip_on_missing_config: bool = True,
1819
) -> int:
1920
install(
20-
config_file, store, hook_types=hook_types,
21-
overwrite=True, skip_on_missing_config=True, git_dir=directory,
21+
config_file,
22+
store,
23+
hook_types=hook_types,
24+
overwrite=True,
25+
skip_on_missing_config=skip_on_missing_config,
26+
git_dir=directory,
2227
)
2328
try:
2429
_, out, _ = cmd_output('git', 'config', 'init.templateDir')

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
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,28 @@ def test_try_repo(mock_store_dir):
159159
def test_init_templatedir(mock_store_dir):
160160
with mock.patch.object(main, 'init_templatedir') as patch:
161161
main.main(('init-templatedir', 'tdir'))
162+
163+
assert patch.call_count == 1
164+
assert 'tdir' in patch.call_args[0]
165+
assert patch.call_args[1]['hook_types'] == ['pre-commit']
166+
assert patch.call_args[1]['skip_on_missing_config'] is True
167+
168+
169+
def test_init_templatedir_options(mock_store_dir):
170+
args = (
171+
'init-templatedir',
172+
'tdir',
173+
'--hook-type',
174+
'commit-msg',
175+
'--no-allow-missing-config',
176+
)
177+
with mock.patch.object(main, 'init_templatedir') as patch:
178+
main.main(args)
179+
162180
assert patch.call_count == 1
181+
assert 'tdir' in patch.call_args[0]
182+
assert patch.call_args[1]['hook_types'] == ['commit-msg']
183+
assert patch.call_args[1]['skip_on_missing_config'] is False
163184

164185

165186
def test_help_cmd_in_empty_directory(

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy