diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index fe0f1511cd1b96..7d63a55068e384 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -55,9 +55,10 @@ repos: - id: win-clang-format name: win-clang-format description: clang-format - entry: './tasks/git-hooks/wincpplang.py' + entry: 'inv pre-commit.check-winclang-format' language: system types_or: [c, c++, c#] + pass_filenames: false - id: clang-format name: clang-format description: clang-format diff --git a/tasks/git-hooks/wincpplang.py b/tasks/git-hooks/wincpplang.py deleted file mode 100755 index 87b4f52f5533a9..00000000000000 --- a/tasks/git-hooks/wincpplang.py +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env python3 - -import os -import subprocess -import sys - -if os.name != 'nt': - # Don't run on Linux - sys.exit(0) - - -def find_clang_format(search_dirs): - for search_dir in search_dirs: - for root, _, files in os.walk(search_dir): - for basename in files: - if basename == 'clang-format.exe': - return os.path.join(root, basename) - - -clang_format_path = os.environ.get('CLANG_FORMAT_PATH') -if clang_format_path is None: - search_dirs = ['C:/Program Files/Microsoft Visual Studio', 'C:/Program Files (x86)/Microsoft Visual Studio'] - clang_format_path = find_clang_format(search_dirs) - -print(clang_format_path) - -try: - subprocess.run(f'"{clang_format_path}" --dry-run --Werror {",".join(sys.argv[1:])}', shell=True, check=True) -except subprocess.CalledProcessError: - # Signal failure to pre-commit - sys.exit(-1) diff --git a/tasks/pre_commit.py b/tasks/pre_commit.py index 49ce9fc7900b4f..4158b5106be138 100644 --- a/tasks/pre_commit.py +++ b/tasks/pre_commit.py @@ -1,3 +1,4 @@ +import os import re import sys @@ -21,6 +22,28 @@ def update_pyapp_file() -> str: return DEVA_PRE_COMMIT_CONFIG +@task +def check_winclang_format(ctx): + if os.name != 'nt': # Don't run on Linux + return + + def find_clang_format(search_dirs): + for search_dir in search_dirs: + for root, _, files in os.walk(search_dir): + for basename in files: + if basename == 'clang-format.exe': + return os.path.join(root, basename) + + clang_format_path = os.environ.get('CLANG_FORMAT_PATH') + if clang_format_path is None: + search_dirs = ['C:/Program Files/Microsoft Visual Studio', 'C:/Program Files (x86)/Microsoft Visual Studio'] + clang_format_path = find_clang_format(search_dirs) + + print(clang_format_path) + + ctx.run(f'"{clang_format_path}" --dry-run --Werror {",".join(get_staged_files(ctx))}') + + @task def check_set_x(ctx): # Select only relevant files