From 4d9a88298b7b45b8bd05c3911dfbbbc280a90fa3 Mon Sep 17 00:00:00 2001 From: Oleg Broytman Date: Mon, 16 Feb 2015 06:09:43 +0300 Subject: [PATCH 1/3] Minor refactoring --- flake8/hooks.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/flake8/hooks.py b/flake8/hooks.py index 1cbe884..e14727e 100644 --- a/flake8/hooks.py +++ b/flake8/hooks.py @@ -128,11 +128,10 @@ def run(command, raw_output=False, decode=True): # endswith to be given a bytes object or a tuple of bytes but not native # string objects. This is simply less mysterious than using b'.py' in the # endswith method. That should work but might still fail horribly. - if hasattr(stdout, 'decode'): - if decode: + if decode: + if hasattr(stdout, 'decode'): stdout = stdout.decode('utf-8') - if hasattr(stderr, 'decode'): - if decode: + if hasattr(stderr, 'decode'): stderr = stderr.decode('utf-8') if not raw_output: stdout = [line.strip() for line in stdout.splitlines()] From d03b5269130403d064a80d4a2b779d7e685d273b Mon Sep 17 00:00:00 2001 From: Oleg Broytman Date: Mon, 16 Feb 2015 06:10:03 +0300 Subject: [PATCH 2/3] Use git config before os.environ Get parameter's value using git config before trying os.environ. --- flake8/hooks.py | 47 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 7 deletions(-) diff --git a/flake8/hooks.py b/flake8/hooks.py index e14727e..0cbd88b 100644 --- a/flake8/hooks.py +++ b/flake8/hooks.py @@ -163,16 +163,49 @@ def find_vcs(): return '' +def get_git_config(option, type='', convert_type=True): + # type can be --bool, --int or an empty string + _, git_cfg_value, _ = run('git config --get %s %s' % (type, option), + raw_output=True) + git_cfg_value = git_cfg_value.strip() + if not convert_type: + return git_cfg_value + if type == '--bool': + git_cfg_value = git_cfg_value == 'true' + elif git_cfg_value and type == '--int': + git_cfg_value = int(git_cfg_value) + return git_cfg_value + + +_params = dict([ + ('FLAKE8_COMPLEXITY', '--int'), + ('FLAKE8_STRICT', '--bool'), + ('FLAKE8_IGNORE', ''), + ('FLAKE8_LAZY', '--bool'), +]) + + +def get_git_param(option, default=''): + type = _params[option] + param_value = get_git_config(option.lower().replace('_', '.'), + type=type, convert_type=False) + if param_value == '': + param_value = os.getenv(option, default) + if (type == '--bool') and not isinstance(param_value, bool): + param_value = param_value.lower() == 'true' + elif param_value and type == '--int': + param_value = int(param_value) + return param_value + + git_hook_file = """#!/usr/bin/env python import sys -import os -from flake8.hooks import git_hook - -COMPLEXITY = os.getenv('FLAKE8_COMPLEXITY', 10) -STRICT = os.getenv('FLAKE8_STRICT', False) -IGNORE = os.getenv('FLAKE8_IGNORE') -LAZY = os.getenv('FLAKE8_LAZY', False) +from flake8.hooks import git_hook, get_git_param +COMPLEXITY = get_git_param('FLAKE8_COMPLEXITY', 10) +STRICT = get_git_param('FLAKE8_STRICT', False) +IGNORE = get_git_param('FLAKE8_IGNORE') +LAZY = get_git_param('FLAKE8_LAZY', False) if __name__ == '__main__': sys.exit(git_hook( From 836d66a11f4f8791e9f98d83ba77994d43534b80 Mon Sep 17 00:00:00 2001 From: Oleg Broytman Date: Mon, 16 Feb 2015 07:31:22 +0300 Subject: [PATCH 3/3] Document configuration file settings --- docs/vcs.rst | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/vcs.rst b/docs/vcs.rst index b473616..df56b39 100644 --- a/docs/vcs.rst +++ b/docs/vcs.rst @@ -14,21 +14,21 @@ In the case of Git, the hook won't be installed if a custom ``pre-commit`` hook file is already present in the ``.git/hooks`` directory. -You can control the behavior of the pre-commit hook using environment -variables: +You can control the behavior of the pre-commit hook using configuration file +settings or environment variables: -``FLAKE8_COMPLEXITY`` +``flake8.complexity`` or ``FLAKE8_COMPLEXITY`` Any value > 0 enables complexity checking with McCabe. (defaults to 10) -``FLAKE8_STRICT`` +``flake8.strict`` or ``FLAKE8_STRICT`` If True, this causes the commit to fail in case of any errors at all. (defaults to False) -``FLAKE8_IGNORE`` +``flake8.ignore`` or ``FLAKE8_IGNORE`` Comma-separated list of errors and warnings to ignore. (defaults to empty) -``FLAKE8_LAZY`` +``flake8.lazy`` or ``FLAKE8_LAZY`` If True, also scans those files not added to the index before commit. (defaults to False)