предварительная фиксация для локального перехвата выдает ошибку: «нераспознанные аргументы: .pre-commit-config.yaml»

#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 из conda environment.yml . Так имеет ли смысл вставлять: ^environment.yml$ in files ? Потому что мы хотим проверить, обновляются ли требования пользователей при 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