ловушка pre-commit для проверки миграции django

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

Один из способов реализовать это - ПРОЙТИ обработчик предварительной фиксации, если команда makemigrations не возвращает никаких изменений.

$ ./manage.py makemigrations --dry-run
No changes detected

И чтобы ОТКАЗАТЬ перехватчик предварительной фиксации, если он что-то возвращает:

$ ./manage.py makemigrations --dry-run
Migrations for 'myapp':
  myapp/migrations/0003_auto_20201213_2233.py
    - Alter field type on event

Как я могу написать эту ловушку перед фиксацией? Есть ли лучший подход, чем использование makemigrations? Это то, что у меня есть до сих пор, но оно всегда проходит (я думаю, мне нужно разобрать ответ):

repos:
  - repo: local
    hooks:
      - id: pre-commit-django-migrations
        name: Check django migrations
        entry: ./manage.py makemigrations --dry-run
        language: system
        types: [python]
        pass_filenames: false

person Johnny Metz    schedule 14.12.2020    source источник


Ответы (1)


Из документации Django makemigrations

--check

Заставляет makemigrations завершать работу с ненулевым статусом при обнаружении изменений модели без миграций.

Таким образом, вы можете использовать --check вместо

  entry: python manage.py makemigrations --check
person iklinac    schedule 14.12.2020
comment
Стоит отметить, что --no-input следует добавить в качестве опции, чтобы Django не запрашивал интерактивный ввод. - person Anakhand; 10.07.2021