Понимание того, как настроить предварительную фиксацию с помощью репо: Локальный

#pre-commit.com

Вопрос:

Я пытаюсь получить предварительную фиксацию на работе (у меня она работает на персональном компьютере). Наша настройка безопасности не позволит предварительной фиксации ссылаться на внешние репозитории и устанавливать внешние пакеты pip из них.

Похоже, что мои варианты таковы:

  1. Храните копию необходимых репозиториев на локальном сервере git
  2. Setup .pre-commit-config.yml для использования локального репо

Прежде чем я решу, какой путь выбрать, я хочу узнать больше о том, как работает местное репо, но не могу найти много документации по спецификациям на веб-сайте предварительной фиксации (или где-либо еще).

У меня есть настройка .pre-commit-config.yml, как показано в примере ниже.

 repos:
-   repo: local
    hooks:
      - id: isort
        name: Run isort
        entry: isort
        language: system
      - id: black
        name: Run black
        entry: black
        language: system
      - id: flake8
        name: Run flake8
        entry: flake8
        language: system
      - id: pydocstyle
        name: Run pydocstyle
        entry: pydocstyle
        language: system
 

Если я использую вышеуказанный файл .pre-commit-config.yml, какие системные версии пакетов используются? Это версия в активной среде conda (я использую conda)? Я думал, что так и будет, но крючки предварительной фиксации , похоже, запущены, хотя у меня нет isort , black , и flake8 или pydocstyle в активированной среде conda.

Мне это кажется странным, но я не могу найти ничего в Интернете, чтобы подтвердить, какие системные версии этих пакетов будут использоваться при настройке локального репозитория.

Кроме того, что произойдет, если я использую language: python вместо language: system ?

Я также открыт, если у кого-то еще есть какие-либо идеи о том, как использовать предварительную фиксацию с ограничениями безопасности, с которыми я сталкиваюсь, помимо того, что я изложил.

Ответ №1:

локальные крючки репозитория задокументированы здесь

как правило, они являются аварийным люком для фреймворка и, как правило, не являются маршрутом, по которому вы должны стремиться (предлагаемый маршрут-использование многоразовых репозиториев).

language: system это дополнительный аварийный люк, в этом режиме предварительная фиксация не управляет вашими инструментами, и вы должны установить их все вручную (это полностью противоречит цели платформы, но в некоторых случаях обеспечивает некоторую совместимость с устаревшими версиями). ибо language: system он будет запускать инструменты так, как если бы вы запускали их в своей оболочке (например entry: flake8 , будет использовать все, что which flake8 возвращает).

language: python с другой стороны, это управляемая среда, предварительная фиксация настроит ее и установит для вас. ~как правило, если вы используете language: python с repo: local , вы будете использовать additional_dependencies для установки этих вещей

каждый из языков также задокументирован на веб-сайте


отказ от ответственности: я создал предварительную фиксацию

Комментарии:

1. Энтони — спасибо за информацию. Я ценю помощь и ваши усилия по созданию предварительного обязательства. Я хотел уточнить еще пару вещей, которые, как мне кажется, я понимаю из документов, но не совсем уверен. При выборе types: [python] будет ли это просто выполняться для любых файлов Python в фиксации? Кроме того, есть ли способ настроить предварительную фиксацию, чтобы она загружала и настраивала необходимые пакеты из Anaconda? У меня есть ограничение, что в данный момент вещи должны поступать из репозиториев Anaconda (именно поэтому я рассматриваю возможность использования локального репозитория с language: system).

2. Чтобы уточнить, я думаю, что кое-что выяснил, за исключением того, можно ли загружать вещи из основных репозиториев Anaconda/conda-forge. Возможно ли это в настоящее время или потенциальный запрос на функцию (например, добавить язык: python-conda)?

3. там уже есть language: conda -и да types контролирует, на каких файлах выполняются-это говорит о том, что это оба отдельных вопроса (комментарии удаляются ТАК часто) и могут быть полезны в качестве отдельных вопросов и ответов