diff --git a/lib/overcommit/git_config.rb b/lib/overcommit/git_config.rb index c6057f10..b2d48cfc 100644 --- a/lib/overcommit/git_config.rb +++ b/lib/overcommit/git_config.rb @@ -13,7 +13,7 @@ def comment_character def hooks_path path = `git config --get core.hooksPath`.chomp - return File.join(Overcommit::Utils.repo_root, '.git', 'hooks') if path.empty? + return File.join(Overcommit::Utils.git_dir, 'hooks') if path.empty? File.absolute_path(path) end end diff --git a/spec/overcommit/installer_spec.rb b/spec/overcommit/installer_spec.rb index c1159304..622dab43 100644 --- a/spec/overcommit/installer_spec.rb +++ b/spec/overcommit/installer_spec.rb @@ -225,6 +225,27 @@ def hook_files_installed?(hooks_dir) end end end + + context 'which has an external git dir' do + let(:submodule) { File.join(target, 'submodule') } + before do + system 'git', 'submodule', 'add', target, 'submodule', + chdir: target, out: :close, err: :close + end + let(:submodule_git_file) { File.join(submodule, '.git') } + let(:submodule_git_dir) do + File.expand_path(File.read(submodule_git_file)[/gitdir: (.*)/, 1], submodule) + end + let(:submodule_hooks_dir) { File.join(submodule_git_dir, 'hooks') } + + subject { installer.run(submodule, options) } + + it 'installs hooks into the correct external directory' do + expect { subject }.to change { + hook_files_installed?(submodule_hooks_dir) + }.from(false).to(true) + end + end end end end