Запускать ловушку перед фиксацией только в том случае, если все остальные ловушки успешны.

У меня есть предварительная установка с несколькими довольно стандартными репозиториями (в любом случае для проекта Python) и одним очень волшебным действием для конкретного проекта.

Что-то вроде этого:

repos:
  - repo: https://github.com/timothycrosley/isort
    ...
  - repo: https://github.com/psf/black
    ...
  - repo: https://gitlab.com/pycqa/flake8
    ...

  - repo: local
    hooks:
      - id: local_project_specific_magic
        name: local-magic-script
        entry: magic_script.sh
        language: script

Все это работает нормально, когда все проверки успешны.

Мне нужно добиться, чтобы последний local_project_specific_magic хук не выполнялся, если какой-либо из предыдущих хуков не сработал. Это выполнимо?


Я попытался добавить fail_fast: true, и, похоже, это сработало, но это также предотвращает запуск других хуков, если какой-либо из них не работает. Например, даже если isort исправляет какой-то импорт, я все равно хочу, чтобы черный делал свое дело.


person frnhr    schedule 21.04.2021    source источник


Ответы (1)


fail_fast: true настолько близок, насколько вы собираетесь получить без значительного хирургия


вы можете представить себе, что каждый другой хук делает что-то вроде:

entry: bash -c 'black "$@" || touch .fail' --

а затем ваш скрипт делает что-то вроде if [ -f .fail ]; then echo 'some other hook failed' && exit 1; fi

вам также понадобится хук always_run: true в начале, чтобы убедиться, что .fail не существует как хорошо (rm -f .fail)

но все это звучит как большой, неподдерживаемый взлом. Я подозреваю, что у вас проблема с XY, поскольку ваше требование кажется чрезвычайно странным - возможно, уточнить, зачем вам нужна эта установка?


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

person Anthony Sottile    schedule 21.04.2021