jish / pre-commit

A slightly improved pre-commit hook for git
https://jish.github.io/pre-commit/
Other
796 stars 96 forks source link

default template symlink is missing after gem install #243

Closed m1foley closed 7 years ago

m1foley commented 7 years ago

I recently installed the newest version of pre-commit on OS X 10.11.6. pre-commit install doesn't work unless I explicitly give it the automatic argument:

$ pre-commit install
Could not find template default
$ pre-commit install default
Could not find template default
$ pre-commit install automatic
Installed /Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/templates/hooks/automatic to .git/hooks/pre-commit

The cause seems to be that the default symlink doesn't exist:

$ gem list pre-commit

*** LOCAL GEMS ***

pre-commit (0.29.0)
$ ls -l /Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/templates/hooks/
total 16
-rwxr-xr-x  1 mike  staff   1.1K Oct  3 12:55 automatic*
-rwxr-xr-x  1 mike  staff   369B Oct  3 12:55 manual*

If I re-install the gem with verbose logging, I see that the default symlink is in the file list, but it doesn't seem to be there afterwards.

$ gem install -V pre-commit
GET https://api.rubygems.org/latest_specs.4.8.gz
302 Moved Temporarily
GET https://rubygems.global.ssl.fastly.net/latest_specs.4.8.gz
304 Not Modified
HEAD https://api.rubygems.org/api/v1/dependencies
200 OK
GET https://api.rubygems.org/api/v1/dependencies?gems=pre-commit
200 OK
GET https://api.rubygems.org/api/v1/dependencies?gems=pluginator
200 OK
Downloading gem pre-commit-0.29.0.gem
GET https://api.rubygems.org/gems/pre-commit-0.29.0.gem
302 Moved Temporarily
GET https://rubygems.global.ssl.fastly.net/gems/pre-commit-0.29.0.gem
Fetching: pre-commit-0.29.0.gem (100%)
200 OK
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/README.md
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/bin/pre-commit
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pluginator/extensions/find_check.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/checks/before_all.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/checks/ci.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/checks/coffeelint.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/checks/common.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/checks/console_log.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/checks/csslint.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/checks/debugger.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/checks/gemfile_path.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/checks/go.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/checks/go_build.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/checks/go_fmt.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/checks/jshint.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/checks/jslint.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/checks/json.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/checks/local.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/checks/merge_conflict.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/checks/migration.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/checks/nb_space.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/checks/pry.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/checks/rails.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/checks/rspec_focus.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/checks/rubocop.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/checks/ruby.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/checks/ruby_symbol_hashrockets.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/checks/scss_lint.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/checks/tabs.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/checks/whitespace.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/checks/yaml.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/configuration/providers/README.md
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/configuration/providers/default.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/configuration/providers/env.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/configuration/providers/git.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/configuration/providers/git_old.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/plugins/pre_commit/configuration/providers/yaml.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/pre-commit.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/pre-commit/checks.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/pre-commit/checks/grep.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/pre-commit/checks/js.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/pre-commit/checks/plugin.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/pre-commit/checks/plugin/config_file.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/pre-commit/checks/shell.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/pre-commit/cli.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/pre-commit/configuration.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/pre-commit/configuration/providers.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/pre-commit/configuration/top_level.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/pre-commit/error_list.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/pre-commit/installer.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/pre-commit/line.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/pre-commit/list_evaluator.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/pre-commit/message.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/pre-commit/plugins_list.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/pre-commit/runner.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/pre-commit/support/csslint/csslint.js
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/pre-commit/support/jshint/jshint.js
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/pre-commit/support/jslint/lint.js
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/pre-commit/template.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/pre-commit/utils/git_conversions.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/lib/pre-commit/utils/staged_files.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/templates/gem/GEM_NAME.gemspec
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/templates/gem/Gemfile
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/templates/gem/LICENSE
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/templates/gem/README.md
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/templates/gem/Rakefile
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/templates/gem/lib/plugins/pre_commit/checks/PLUGIN_NAME.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/templates/gem/lib/pre-commit/PLUGIN_NAME/version.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/templates/gem/test/minitest_helper.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/templates/gem/test/plugins/pre_commit/checks/PLUGIN_NAME_test.rb
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/templates/hooks/automatic
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/templates/hooks/default
/Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.29.0/templates/hooks/manual
/Users/mike/.rbenv/versions/2.1.6/bin/pre-commit
Successfully installed pre-commit-0.29.0
1 gem installed

If I clone the repo directly, the symlink is there:

$ git clone git@github.com:jish/pre-commit.git
Cloning into 'pre-commit'...
remote: Counting objects: 4583, done.
remote: Compressing objects: 100% (40/40), done.
remote: Total 4583 (delta 16), reused 0 (delta 0), pack-reused 4536
Receiving objects: 100% (4583/4583), 8.58 MiB | 5.62 MiB/s, done.
Resolving deltas: 100% (2213/2213), done.
$ cd pre-commit/
$ ls -l templates/hooks/
total 24
-rwxr-xr-x+ 1 mike  staff   1.1K Oct  3 13:09 automatic*
lrwxr-xr-x  1 mike  staff     9B Oct  3 13:09 default@ -> automatic
-rwxr-xr-x+ 1 mike  staff   369B Oct  3 13:09 manual*
jish commented 7 years ago

Wow, that's weird. I have no idea why the symlink is not being put in place properly for you. I guess there is no real reason why we are using a symlink to figure out which hook is the default hook. We can just move that logic into code instead https://github.com/jish/pre-commit/pull/244

jish commented 7 years ago

Released version 0.30.0. Let me know if that solves your issue.

m1foley commented 7 years ago

Verified fixed.

$ gem install pre-commit
Fetching: pre-commit-0.30.0.gem (100%)
Successfully installed pre-commit-0.30.0
1 gem installed
$ pre-commit install
Installed /Users/mike/.rbenv/versions/2.1.6/lib/ruby/gems/2.1.0/gems/pre-commit-0.30.0/templates/hooks/automatic to .git/hooks/pre-commit