Fix "No C files in filelist: None" (#15560)

* Fix "No C files in filelist: None"

* Align other commands

* force absolute paths
This commit is contained in:
Joel Challis 2022-01-03 21:54:46 +00:00 committed by GitHub
parent a88dc08643
commit aea7155423
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 11 deletions

View file

@ -1,6 +1,5 @@
"""Format C code according to QMK's style. """Format C code according to QMK's style.
""" """
from os import path
from shutil import which from shutil import which
from subprocess import CalledProcessError, DEVNULL, Popen, PIPE from subprocess import CalledProcessError, DEVNULL, Popen, PIPE
@ -15,6 +14,12 @@ core_dirs = ('drivers', 'quantum', 'tests', 'tmk_core', 'platforms')
ignored = ('tmk_core/protocol/usb_hid', 'platforms/chibios/boards') ignored = ('tmk_core/protocol/usb_hid', 'platforms/chibios/boards')
def is_relative_to(file, other):
"""Provide similar behavior to PurePath.is_relative_to in Python > 3.9
"""
return str(normpath(file).resolve()).startswith(str(normpath(other).resolve()))
def find_clang_format(): def find_clang_format():
"""Returns the path to clang-format. """Returns the path to clang-format.
""" """
@ -68,18 +73,19 @@ def cformat_run(files):
def filter_files(files, core_only=False): def filter_files(files, core_only=False):
"""Yield only files to be formatted and skip the rest """Yield only files to be formatted and skip the rest
""" """
files = list(map(normpath, filter(None, files)))
if core_only: if core_only:
# Filter non-core files # Filter non-core files
for index, file in enumerate(files): for index, file in enumerate(files):
# The following statement checks each file to see if the file path is # The following statement checks each file to see if the file path is
# - in the core directories # - in the core directories
# - not in the ignored directories # - not in the ignored directories
if not any(str(file).startswith(i) for i in core_dirs) or any(str(file).startswith(i) for i in ignored): if not any(is_relative_to(file, i) for i in core_dirs) or any(is_relative_to(file, i) for i in ignored):
files[index] = None del files[index]
cli.log.debug("Skipping non-core file %s, as '--core-only' is used.", file) cli.log.debug("Skipping non-core file %s, as '--core-only' is used.", file)
for file in files: for file in files:
if file and file.name.split('.')[-1] in c_file_suffixes: if file.suffix[1:] in c_file_suffixes:
yield file yield file
else: else:
cli.log.debug('Skipping file %s', file) cli.log.debug('Skipping file %s', file)
@ -118,12 +124,8 @@ def format_c(cli):
print(git_diff.stderr) print(git_diff.stderr)
return git_diff.returncode return git_diff.returncode
files = [] changed_files = git_diff.stdout.strip().split('\n')
files = list(filter_files(changed_files, True))
for file in git_diff.stdout.strip().split('\n'):
if not any([file.startswith(ignore) for ignore in ignored]):
if path.exists(file) and file.split('.')[-1] in c_file_suffixes:
files.append(file)
# Sanity check # Sanity check
if not files: if not files:

View file

@ -25,8 +25,9 @@ def yapf_run(files):
def filter_files(files): def filter_files(files):
"""Yield only files to be formatted and skip the rest """Yield only files to be formatted and skip the rest
""" """
files = list(map(normpath, filter(None, files)))
for file in files: for file in files:
if file and normpath(file).name.split('.')[-1] in py_file_suffixes: if file.suffix[1:] in py_file_suffixes:
yield file yield file
else: else:
cli.log.debug('Skipping file %s', file) cli.log.debug('Skipping file %s', file)