Rails: overcommit --run проходит, но хуки перед фиксацией терпят неудачу

У меня возникла проблема с перехватчиками перед фиксацией в overcommit, который настроен на запуск rubocop и rails_best_practices.

Короче говоря, все три команды, перечисленные ниже, прошли, но overcommit не позволил мне зафиксировать в git. Любые советы о том, почему/как обойти эту проблему, будут оценены.

# These passed
rubocop -a
rails_best_practices .
overcommit --run
# Git commit failed
$ overcommit --run
Running pre-commit hooks
Analyze with RailsBestPractices..................[RailsBestPractices] OK
Analyze with RuboCop........................................[RuboCop] OK

✓ All pre-commit hooks passed


$ git commit -m 'Ensure lower case with Attr API'
Running pre-commit hooks
Analyze with RailsBestPractices..................[RailsBestPractices] FAILED
Errors on modified lines:
/Users/USER_NAME/projects/APP_NAME/app/models/lower_case_string.rb:2 - remove unused methods (LowerCaseString#cast)

Analyze with RuboCop........................................[RuboCop] FAILED
Errors on modified lines:
/Users/USER_NAME/projects/APP_NAME/app/models/lower_case_string.rb:3:3: C: Layout/IndentationWidth: Use 2 (not 0) spaces for indentation.

✗ One or more pre-commit hooks failed

Теперь я прочитал здесь, что overcommit --run не запускайте хуки так же, как и при попытке зафиксировать (весь проект или только изменения, которые нужно зафиксировать). Однако я не уверен, как это повлияет на мой случай, тем более что rubocop и rails_best_practices также прошли по отдельности. Кстати, обе приведенные здесь ошибки являются ложными тревогами. rails_best_practices в первую очередь не следует проверять неиспользуемые методы, так как эта проверка была отключена в config/rails_best_practices.yml.


person reesaspieces    schedule 17.04.2019    source источник


Ответы (1)


После нескольких недель работы с этими драгоценными камнями я думаю, что понял это. Я оставлю здесь несколько советов для тех, кто сталкивается с подобными проблемами.

<сильный>1. Внесите свои изменения, прежде чем делать overcommit --run с git add <file>

В этом комментарии и документы говорят, что команда --run не проверяет неотслеживаемые файлы.

<сильный>2. Добавить опцию gemfile к .overcommit.yml

Одна из проблем, с которой я столкнулся, заключалась в том, что overcommit не мог прочитать мой config/rails_best_practices.yml (во-первых, он не должен был проверять unused methods, поскольку эта проверка была отключена в файле конфигурации).

Кажется, когда я пытался git commit, overcommit использовал гемы, установленные в моей системе (не в Gemfile), и в результате почему-то не смог прочитать мой файл конфигурации. Поэтому я добавил параметр gemfile, как рекомендовано в документации, и убедился, что overcommit использует версию Gemfile/bundler. С тех пор я не получал ошибку темы. Как говорят документы:

Если вы используете Bundler для управления зависимостями гема Ruby, вы, вероятно, захотите использовать опцию gemfile, чтобы контролировать, какие версии гема доступны во время запуска хуков.

Мой файл .overcommit.yml для справки:

gemfile: Gemfile

PreCommit:
 RuboCop:
   enabled: true
   on_warn: fail

 RailsBestPractices:
   enabled: true
   on_warn: fail
   command: ['bundle', 'exec', 'rails_best_practices', '-c', 'config/rails_best_practices.yml']

В качестве примечания — я не пробовал это, но, по-видимому, вы также можете создать отдельный Gemfile только для целей overcommit, если вы чувствуете, что загрузка исходного Gemfile замедляет выполнение хука (docs).

person reesaspieces    schedule 10.05.2019