# Git has the notion of hooks, which are custom scripts that are run on
# specific events.  One of these hooks is the pre-commit hook (located at
# .git/hooks/pre-commit), which is run when committing, before specifying a
# message.
#
# To ease management of the pre-commit hook, the pre-commit framework
# ( https://pre-commit.com ) was developed.  This is the configuration file
# for that framework.  It contains a list of hooks, with information on where
# to find them and on which files to run them.
#
# See here ( https://pre-commit.com/#install ) on how to install the
# pre-commit framework.
#
# To run all the hooks specified in this file manually, you can do:
# $ pre-commit run
#
# To run some hooks and skip others, you can use environment variable SKIP:
# $ SKIP=flake8,isort pre-commit run
#
# To install the pre-commit framework in the repository in order to run the
# hooks on every commit, do:
# $ pre-commit install
#
# After installing the pre-commit framework, you can skip running all
# pre-commit hooks using --no-verify, or some using SKIP.
# $ git commit --no-verify ...
# $ SKIP=flake8,isort git commit ...
#
# In case some of these hooks don't work for you, you can make the SKIP
# setting permanent by:
# - setting SKIP in your environment
#   (this will affect all repositories where it is set)
# - setting SKIP in .git/hooks/pre-commit by adding "export SKIP=..."
#   (this will affect only this repository, but it may have to be re-added
#    if .git/hooks/pre-commit is regenerated)
#
# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks

minimum_pre_commit_version: 3.2.0
repos:
  - repo: https://github.com/psf/black-pre-commit-mirror
    rev: 25.1.0
    hooks:
      - id: black
        types_or: [file]
        files: 'gdb/.*\.py(\.in)?$'
  - repo:  https://github.com/pycqa/flake8
    rev: 7.1.1
    hooks:
    - id: flake8
      types_or: [file]
      # Run this for (in glob notation):
      #
      #  - gdb/gdb-gdb.py.in
      #  - gdb/*.py
      #  - gdb/python/**/*.py
      #  - gdb/testsuite/*.py
      #
      files: '^gdb/(gdb-gdb\.py\.in|[^/]+\.py|python/.+\.py|testsuite/[^/]+\.py)$'
      args: [--config, gdb/setup.cfg]
  - repo: https://github.com/pycqa/isort
    rev: 6.0.0
    hooks:
    - id: isort
      types_or: [file]
      files: 'gdb/.*\.py(\.in)?$'
  - repo: https://github.com/codespell-project/codespell
    rev: v2.4.1
    hooks:
    - id: codespell
      files: '^(gdbsupport|gdbserver|gdb/(tui|target|data-directory|po|system-gdbinit|mi|syscalls|arch|regformats|compile|python|guile))/'
      args: [--config, gdb/contrib/setup.cfg]
  - repo: local
    hooks:
    - id: check-include-guards
      name: check-include-guards
      language: python
      entry: gdb/check-include-guards.py
      # All gdb header files, but not headers in the test suite.
      files: '^(gdb(support|server)?)/.*\.h$'
      exclude: '.*/testsuite/.*'
