mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-21 15:56:42 +00:00
438393293e
pre-commit-python overrides the list of ignored Python style errors. Unfortunately, before this patch the list did not exclude W503 and W504 (which are otherwise ignored by default). The consequence of having those two warnings enabled at the same time is that it's not possible to break lines on binary operators, which is an unreasonable unintentional restriction: 'validateflow': "validateflow, expectations-dir=\"" + expectations_dir + "\", actual-results-dir=\"" + actual_results_dir + "\"", W504 line break after binary operator 'validateflow': "validateflow, expectations-dir=\"" + expectations_dir + "\", actual-results-dir=\"" + actual_results_dir + "\"", W503 line break before binary operator This patch excludes W503 so that there is a valid style for breaking lines on binary operators.
81 lines
2.7 KiB
Python
Executable file
81 lines
2.7 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
import tempfile
|
|
|
|
NOT_PYCODESTYLE_COMPLIANT_MESSAGE_PRE = \
|
|
"Your code is not fully pycodestyle compliant and contains"\
|
|
" the following coding style issues:\n\n"
|
|
|
|
NOT_PYCODESTYLE_COMPLIANT_MESSAGE_POST = \
|
|
"Please fix these errors and commit again, you can do so "\
|
|
"from the root directory automatically like this, assuming the whole "\
|
|
"file is to be commited:"
|
|
|
|
NO_PYCODESTYLE_MESSAGE = \
|
|
"You should install the pycodestyle style checker to be able"\
|
|
" to commit in this repo.\nIt allows us to garantee that "\
|
|
"anything that is commited respects the pycodestyle coding style "\
|
|
"standard.\nYou can install it:\n"\
|
|
" * on ubuntu, debian: $sudo apt-get install pycodestyle \n"\
|
|
" * on fedora: #yum install python3-pycodestyle \n"\
|
|
" * on arch: #pacman -S python-pycodestyle \n"\
|
|
" * or `pip install --user pycodestyle`"
|
|
|
|
|
|
def system(*args, **kwargs):
|
|
kwargs.setdefault('stdout', subprocess.PIPE)
|
|
proc = subprocess.Popen(args, **kwargs)
|
|
out, err = proc.communicate()
|
|
if type(out) == bytes:
|
|
out = out.decode()
|
|
return out
|
|
|
|
|
|
def copy_files_to_tmp_dir(files):
|
|
tempdir = tempfile.mkdtemp()
|
|
for name in files:
|
|
filename = os.path.join(tempdir, name)
|
|
filepath = os.path.dirname(filename)
|
|
if not os.path.exists(filepath):
|
|
os.makedirs(filepath)
|
|
with open(filename, 'w') as f:
|
|
system('git', 'show', ':' + name, stdout=f)
|
|
|
|
return tempdir
|
|
|
|
|
|
def main():
|
|
modified_files = system('git', 'diff-index', '--cached',
|
|
'--name-only', 'HEAD', '--diff-filter=ACMR').split("\n")[:-1]
|
|
non_compliant_files = []
|
|
output_message = None
|
|
|
|
for modified_file in modified_files:
|
|
try:
|
|
if not modified_file.endswith(".py"):
|
|
continue
|
|
pycodestyle_errors = system('pycodestyle', '--repeat', '--ignore', 'E501,E128,W605,W503', modified_file)
|
|
if pycodestyle_errors:
|
|
if output_message is None:
|
|
output_message = NOT_PYCODESTYLE_COMPLIANT_MESSAGE_PRE
|
|
output_message += pycodestyle_errors
|
|
non_compliant_files.append(modified_file)
|
|
except OSError as e:
|
|
output_message = NO_PYCODESTYLE_MESSAGE
|
|
break
|
|
|
|
if output_message:
|
|
print(output_message)
|
|
if non_compliant_files:
|
|
print(NOT_PYCODESTYLE_COMPLIANT_MESSAGE_POST)
|
|
for non_compliant_file in non_compliant_files:
|
|
print("autopep8 -i ", non_compliant_file, "; git add ",
|
|
non_compliant_file)
|
|
print("git commit")
|
|
sys.exit(1)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|