summaryrefslogtreecommitdiff
path: root/lib/python/qmk/cli/format/c.py
diff options
context:
space:
mode:
authorJoel Challis <git@zvecr.com>2022-01-03 21:54:46 +0000
committerGitHub <noreply@github.com>2022-01-03 21:54:46 +0000
commitaea71554234cce71f9f9d4087253e53d2729f9a7 (patch)
treeaa4a529fc95f46670d76001163b4165d6108bec5 /lib/python/qmk/cli/format/c.py
parenta88dc08643af76e19eff72dbd9b2a0cefea3f23f (diff)
downloadqmk_firmware-aea71554234cce71f9f9d4087253e53d2729f9a7.tar.gz
qmk_firmware-aea71554234cce71f9f9d4087253e53d2729f9a7.zip
Fix "No C files in filelist: None" (#15560)
* Fix "No C files in filelist: None" * Align other commands * force absolute paths
Diffstat (limited to 'lib/python/qmk/cli/format/c.py')
-rw-r--r--lib/python/qmk/cli/format/c.py22
1 files changed, 12 insertions, 10 deletions
diff --git a/lib/python/qmk/cli/format/c.py b/lib/python/qmk/cli/format/c.py
index 568684ed56..fe2f97da94 100644
--- a/lib/python/qmk/cli/format/c.py
+++ b/lib/python/qmk/cli/format/c.py
@@ -1,6 +1,5 @@
"""Format C code according to QMK's style.
"""
-from os import path
from shutil import which
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')
+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():
"""Returns the path to clang-format.
"""
@@ -68,18 +73,19 @@ def cformat_run(files):
def filter_files(files, core_only=False):
"""Yield only files to be formatted and skip the rest
"""
+ files = list(map(normpath, filter(None, files)))
if core_only:
# Filter non-core files
for index, file in enumerate(files):
# The following statement checks each file to see if the file path is
# - in the core 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):
- files[index] = None
+ if not any(is_relative_to(file, i) for i in core_dirs) or any(is_relative_to(file, i) for i in ignored):
+ del files[index]
cli.log.debug("Skipping non-core file %s, as '--core-only' is used.", file)
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
else:
cli.log.debug('Skipping file %s', file)
@@ -118,12 +124,8 @@ def format_c(cli):
print(git_diff.stderr)
return git_diff.returncode
- files = []
-
- 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)
+ changed_files = git_diff.stdout.strip().split('\n')
+ files = list(filter_files(changed_files, True))
# Sanity check
if not files: