| | |
| |
|
| | from __future__ import print_function |
| |
|
| | import argparse |
| | import os |
| | import subprocess |
| | import sys |
| |
|
| | STYLE_COMMAND = ['./utils/pycodestyle.py', |
| | '--max-line-length=120'] |
| |
|
| |
|
| | def check_author_details(): |
| | """Check author name and email settings from |
| | environment variables populated by git |
| | """ |
| | name = os.environ.get('GIT_AUTHOR_NAME', '') |
| | email = os.environ.get('GIT_AUTHOR_EMAIL', '') |
| | retval = 0 |
| | if len(name) == 0: |
| | print('Please set your name: git config --global user.name "Joe Scientist"') |
| | retval = 1 |
| | if len(email) == 0 or not email.endswith('.mpg.de'): |
| | print('Please set your work email: git config --global user.email "joe.scientist@tuebingen.mpg.de"') |
| | retval = 1 |
| | return retval |
| |
|
| |
|
| | def get_files(): |
| | files = subprocess.check_output(['git', 'status', '--porcelain']).split('\n') |
| | modified_files = [f[3:] for f in files if f and f[0] in 'AM' and f.endswith('.py')] |
| | return modified_files |
| |
|
| |
|
| | def check_python_style(files): |
| | if files: |
| | try: |
| | subprocess.check_output(STYLE_COMMAND + files) |
| | except subprocess.CalledProcessError, e: |
| | print('Python style violations were found:') |
| | print(e.output) |
| | return e.returncode |
| | return 0 |
| |
|
| |
|
| | def main(): |
| | print('Running pre-commit checks!') |
| | files = get_files() |
| | if check_author_details() or check_python_style(files): |
| | print('Pre-commit check failed! Please fix detected issues and re-try,\n' |
| | 'or force the commit using "git commit --no-verify".') |
| | sys.exit(1) |
| | print('Pre-commit checks passed!') |
| |
|
| |
|
| | if __name__ == "__main__": |
| | main() |
| |
|