Merge pull request #1090 from pre-commit/template_dir

Implement `pre-commit init-templatedir`
This commit is contained in:
Anthony Sottile
2019-07-20 20:56:02 -07:00
committed by GitHub
7 changed files with 167 additions and 62 deletions

View File

@@ -0,0 +1,49 @@
import subprocess
import pre_commit.constants as C
from pre_commit.commands.init_templatedir import init_templatedir
from pre_commit.envcontext import envcontext
from pre_commit.util import cmd_output
from testing.fixtures import git_dir
from testing.fixtures import make_consuming_repo
from testing.util import cmd_output_mocked_pre_commit_home
from testing.util import cwd
from testing.util import git_commit
def test_init_templatedir(tmpdir, tempdir_factory, store, cap_out):
target = str(tmpdir.join('tmpl'))
init_templatedir(C.CONFIG_FILE, store, target, hook_type='pre-commit')
lines = cap_out.get().splitlines()
assert lines[0].startswith('pre-commit installed at ')
assert lines[1] == (
'[WARNING] `init.templateDir` not set to the target directory'
)
assert lines[2].startswith(
'[WARNING] maybe `git config --global init.templateDir',
)
with envcontext([('GIT_TEMPLATE_DIR', target)]):
path = make_consuming_repo(tempdir_factory, 'script_hooks_repo')
with cwd(path):
retcode, output, _ = git_commit(
fn=cmd_output_mocked_pre_commit_home,
tempdir_factory=tempdir_factory,
# git commit puts pre-commit to stderr
stderr=subprocess.STDOUT,
)
assert retcode == 0
assert 'Bash hook....' in output
def test_init_templatedir_already_set(tmpdir, tempdir_factory, store, cap_out):
target = str(tmpdir.join('tmpl'))
tmp_git_dir = git_dir(tempdir_factory)
with cwd(tmp_git_dir):
cmd_output('git', 'config', 'init.templateDir', target)
init_templatedir(C.CONFIG_FILE, store, target, hook_type='pre-commit')
lines = cap_out.get().splitlines()
assert len(lines) == 1
assert lines[0].startswith('pre-commit installed at')

View File

@@ -735,7 +735,7 @@ def test_install_disallow_missing_config(tempdir_factory, store):
with cwd(path):
remove_config_from_repo(path)
ret = install(
C.CONFIG_FILE, store, overwrite=True, skip_on_missing_conf=False,
C.CONFIG_FILE, store, overwrite=True, skip_on_missing_config=False,
)
assert ret == 0
@@ -748,7 +748,7 @@ def test_install_allow_missing_config(tempdir_factory, store):
with cwd(path):
remove_config_from_repo(path)
ret = install(
C.CONFIG_FILE, store, overwrite=True, skip_on_missing_conf=True,
C.CONFIG_FILE, store, overwrite=True, skip_on_missing_config=True,
)
assert ret == 0
@@ -766,7 +766,7 @@ def test_install_temporarily_allow_mising_config(tempdir_factory, store):
with cwd(path):
remove_config_from_repo(path)
ret = install(
C.CONFIG_FILE, store, overwrite=True, skip_on_missing_conf=False,
C.CONFIG_FILE, store, overwrite=True, skip_on_missing_config=False,
)
assert ret == 0

View File

@@ -11,6 +11,7 @@ import pytest
import six
from pre_commit import output
from pre_commit.envcontext import envcontext
from pre_commit.logging_handler import logging_handler
from pre_commit.store import Store
from pre_commit.util import cmd_output
@@ -272,3 +273,10 @@ def fake_log_handler():
logger.addHandler(handler)
yield handler
logger.removeHandler(handler)
@pytest.fixture(scope='session', autouse=True)
def set_git_templatedir(tmpdir_factory):
tdir = str(tmpdir_factory.mktemp('git_template_dir'))
with envcontext([('GIT_TEMPLATE_DIR', tdir)]):
yield

View File

@@ -140,6 +140,12 @@ def test_try_repo(mock_store_dir):
assert patch.call_count == 1
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
def test_help_cmd_in_empty_directory(
in_tmpdir,
mock_commands,