Browse Source

Merge remote-tracking branch 'origin/master' into develop

pull/15162/head
QMK Bot 2 years ago
parent
commit
462c3a6151
2 changed files with 61 additions and 24 deletions
  1. +14
    -7
      .github/workflows/format.yaml
  2. +47
    -17
      lib/python/qmk/cli/format/text.py

+ 14
- 7
.github/workflows/format.yaml View File

@ -19,7 +19,9 @@ jobs:
container: qmkfm/qmk_cli container: qmkfm/qmk_cli
steps: steps:
- uses: rlespinasse/github-slug-action@v3.x
- name: Install dependencies
run: |
apt-get update && apt-get install -y dos2unix
- uses: actions/checkout@v2 - uses: actions/checkout@v2
with: with:
@ -31,12 +33,17 @@ jobs:
output: ' ' output: ' '
fileOutput: ' ' fileOutput: ' '
- name: Run qmk format-c and qmk format-python
- name: Run qmk formatters
shell: 'bash {0}' shell: 'bash {0}'
run: | run: |
qmk format-c --core-only -n $(< ~/files.txt)
format_c_exit=$?
qmk format-python -n
format_python_exit=$?
qmk format-c --core-only $(< ~/files.txt)
qmk format-python
qmk format-text $(< ~/files.txt)
git diff
exit $((format_c_exit + format_python_exit))
- name: Fail when formatting required
run: |
for file in $(git diff --name-only); do
echo "::error file=${file}::::File Requires Formatting"
done
test -z "$(git diff --name-only)"

+ 47
- 17
lib/python/qmk/cli/format/text.py View File

@ -1,27 +1,57 @@
"""Ensure text files have the proper line endings. """Ensure text files have the proper line endings.
""" """
from subprocess import CalledProcessError
from itertools import islice
from subprocess import DEVNULL
from milc import cli from milc import cli
from qmk.path import normpath
def _get_chunks(it, size):
"""Break down a collection into smaller parts
"""
it = iter(it)
return iter(lambda: tuple(islice(it, size)), ())
def dos2unix_run(files):
"""Spawn multiple dos2unix subprocess avoiding too long commands on formatting everything
"""
for chunk in _get_chunks(files, 10):
dos2unix = cli.run(['dos2unix', *chunk])
if dos2unix.returncode:
return False
@cli.argument('-b', '--base-branch', default='origin/master', help='Branch to compare to diffs to.')
@cli.argument('-a', '--all-files', arg_only=True, action='store_true', help='Format all files.')
@cli.argument('files', nargs='*', arg_only=True, type=normpath, help='Filename(s) to format.')
@cli.subcommand("Ensure text files have the proper line endings.", hidden=True) @cli.subcommand("Ensure text files have the proper line endings.", hidden=True)
def format_text(cli): def format_text(cli):
"""Ensure text files have the proper line endings. """Ensure text files have the proper line endings.
""" """
try:
file_list_cmd = cli.run(['git', 'ls-files', '-z'], check=True)
except CalledProcessError as e:
cli.log.error('Could not get file list: %s', e)
exit(1)
except Exception as e:
cli.log.error('Unhandled exception: %s: %s', e.__class__.__name__, e)
cli.log.exception(e)
exit(1)
dos2unix = cli.run(['xargs', '-0', 'dos2unix'], stdin=None, input=file_list_cmd.stdout)
if dos2unix.returncode != 0:
print(dos2unix.stderr)
return dos2unix.returncode
# Find the list of files to format
if cli.args.files:
files = list(cli.args.files)
if cli.args.all_files:
cli.log.warning('Filenames passed with -a, only formatting: %s', ','.join(map(str, files)))
elif cli.args.all_files:
git_ls_cmd = ['git', 'ls-files']
git_ls = cli.run(git_ls_cmd, stdin=DEVNULL)
files = list(filter(None, git_ls.stdout.split('\n')))
else:
git_diff_cmd = ['git', 'diff', '--name-only', cli.args.base_branch]
git_diff = cli.run(git_diff_cmd, stdin=DEVNULL)
files = list(filter(None, git_diff.stdout.split('\n')))
# Sanity check
if not files:
cli.log.error('No changed files detected. Use "qmk format-text -a" to format all files')
return False
return dos2unix_run(files)

Loading…
Cancel
Save