#continuous-integration #pre-commit-hook #pre-commit #pre-commit.com
#непрерывная интеграция #предварительная фиксация-перехват #предварительная фиксация #pre-commit.com
Вопрос:
У меня есть следующий репозиторий в pre-commit
файле .pre-commit-config.yaml
- repo: local
hooks:
- id: check_pip
name: Check pip file
description: This hook checks if requirements-dev.txt is up to date.
language: system
entry: python -m scripts.check_pip_requirements
args: ["--compare"]
Но он продолжает выдавать мне ошибку:
ошибка: нераспознанные аргументы: .pre-commit-config.yaml
Поскольку он передает имя файла в качестве аргумента моему скрипту python. Как я могу это предотвратить?
Ответ №1:
чтобы немного очистить ваш пример — и использовать files
для запуска только при изменении необходимых файлов:
- repo: local
hooks:
- id: check_pip
name: Check pip file
description: This hook checks if requirements-dev.txt is up to date.
language: system
entry: python -m scripts.check_pip_requirements --compare
files: ^requirements-dev.txt$
pass_filenames: false
обратите внимание, что я сделал пару вещей:
args
на самом деле это не имеет смысла дляlocal
перехватов, вы можете просто поместить это вentry
pass_filenames
(как вы и делали) —pre-commit
это фреймворк, основанный на передаче имен файлов в исполняемые файлы, но вы можете отключить этоfiles
: это сделает так, чтобы перехват срабатывал только приrequirements-dev.txt
изменении
в качестве альтернативы (если вы ожидаете, что внешние изменения requirements-dev.txt
потребуют запуска этого перехвата), вы можете удалить files
и использовать always_run: true
Отказ от ответственности: Я автор предварительной фиксации
Комментарии:
1. Исходный скрипт создается
requirements-dev.txt
из condaenvironment.yml
. Так имеет ли смысл вставлять:^environment.yml$
infiles
? Потому что мы хотим проверить, обновляются ли требования пользователей приenvironment.yml
изменениях, что является ведущим.
Ответ №2:
Я потратил довольно много времени, выясняя, что вызвало это и как это решить. Это плохо документировано, в конце концов я исправил это методом проб и ошибок. Мы должны использовать pass_filenames: false
в нашем перехвате:
- repo: local
hooks:
- id: check_pip
name: Check pip file
description: This hook checks if requirements-dev.txt is up to date.
language: system
entry: python -m scripts.check_pip_requirements
pass_filenames: false
args: ["--compare"]
Комментарии:
1. если бы вы могли улучшить документы, это было бы здорово —
pass_filenames
, шаблоны аргументов в перехватах2. Обязательно подойдет, спасибо за обновленный ответ и объяснение.
3. Отправил PR @AnthonySottile