# 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
default_install_hook_types: [pre-commit, commit-msg]
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.2.0
    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.1
    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|config|unittests|cli))/'
      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/.*'
    - id: codespell-log
      name: codespell-log
      language: script
      entry: gdb/contrib/codespell-log.sh
      verbose: true
      always_run: true
      stages: [commit-msg]
