Repository: pre-commit/pre-commit

Issue:
Handle when `core.hooksPath` is set?
As we found in https://github.com/pre-commit/pre-commit-hooks/issues/250, pre-commit (despite being installed) will be silently skipped if `code.hooksPath` is set.

A few options:
- during `pre-commit install`, check this variable and warn
- "" but error
- install into the directory at `core.hooksPath` (but it may be outside the working dir? probably not the best idea to write to it)

Discussion:

Patch:
diff --git a/pre_commit/commands/install_uninstall.py b/pre_commit/commands/install_uninstall.py
index 83b97cb..9191222 100644
--- a/pre_commit/commands/install_uninstall.py
+++ b/pre_commit/commands/install_uninstall.py
@@ -2,15 +2,19 @@ from __future__ import print_function
 from __future__ import unicode_literals
 
 import io
+import logging
 import os.path
 import sys
 
 from pre_commit import output
+from pre_commit.util import cmd_output
 from pre_commit.util import make_executable
 from pre_commit.util import mkdirp
 from pre_commit.util import resource_filename
 
 
+logger = logging.getLogger(__name__)
+
 # This is used to identify the hook file we install
 PRIOR_HASHES = (
     '4d9958c90bc262f47553e2c073f14cfe',
@@ -36,6 +40,13 @@ def install(
         skip_on_missing_conf=False,
 ):
     """Install the pre-commit hooks."""
+    if cmd_output('git', 'config', 'core.hooksPath', retcode=None)[1].strip():
+        logger.error(
+            'Cowardly refusing to install hooks with `core.hooksPath` set.\n'
+            'hint: `git config --unset-all core.hooksPath`',
+        )
+        return 1
+
     hook_path = runner.get_hook_path(hook_type)
     legacy_path = hook_path + '.legacy'
 


Test patch:
diff --git a/tests/commands/install_uninstall_test.py b/tests/commands/install_uninstall_test.py
index a49a3e4..f83708e 100644
--- a/tests/commands/install_uninstall_test.py
+++ b/tests/commands/install_uninstall_test.py
@@ -66,6 +66,14 @@ def test_install_hooks_directory_not_present(tempdir_factory):
     assert os.path.exists(runner.pre_commit_path)
 
 
+def test_install_refuses_core_hookspath(tempdir_factory):
+    path = git_dir(tempdir_factory)
+    with cwd(path):
+        cmd_output('git', 'config', '--local', 'core.hooksPath', 'hooks')
+        runner = Runner(path, C.CONFIG_FILE)
+        assert install(runner)
+
+
 @xfailif_no_symlink
 def test_install_hooks_dead_symlink(
         tempdir_factory,