Rails: "overcommit --run" проходит, но перехваты предварительной фиксации завершаются неудачно - PullRequest
0 голосов
/ 17 апреля 2019

У меня возникла проблема с перехватчиками перед фиксацией в 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.

1 Ответ

1 голос
/ 10 мая 2019

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

1.Поместите свои изменения перед выполнением overcommit --run

Как говорят comment и docs , команда --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 ).

...