2014-10-30 43 views
4

我想在我的git diff中更改后的文件的pre-hook中运行flake8,同时也排除了我的配置文件中的文件。flake8,只在差异和排除

files=$(git diff --cached --name-only --diff-filter=ACM); 
if flake8 --config=/path/to/config/flake8-hook.ini $files; then 
    exit 1; 
fi 

我基本上是想这样做:

flake8 --exclude=/foo/ /foo/stuff.py 

再有flake8跳过我通过,因为它是在排除变量的文件。

我也希望它排除不是.py文件的文件。例如:

flake8 example.js 

就在我测试的时候,它们都不起作用。有人有主意吗?

+0

flake8基本上可以为您做所有事情:http://flake8.pycqa.org/zh/latest/user/using-hooks.html – 2017-03-24 18:03:45

回答

4

如果你正在运行后双方未提交flake8并上演着变化Python文件,这一个班轮将这样的伎俩:

flake8 $(git status -s | grep -E '\.py$' | cut -c 4-)

git的状态列出了修改过的文件,grep命令python,用cut切掉M/S位。

,使之成为一个pre-commit钩子,你需要添加壳hashbang:

#!/bin/sh flake8 $(git status -s | grep -E '\.py$' | cut -c 4-)

保存它的.git /挂钩/预提交,使用chmod + X。

0

有两个部分的答案:

1)仅将更改的文件在我的git的pre-commit钩子运行flake8> DIFF

有关唯一DIFF运行flake8文件(已上演),我修改的.git /挂钩/预提交脚本如下:

/bin/sh的

出口PATH =在/ usr/local/bin目录:$ PATH
导出文件= $(git的差异--staged --name只HEAD)
回声$文件
如果[$文件!= “”]
然后
flake8 $文件
网络

我用​​如我一般从sourceTree,承诺其中flake8所在

--staged选项不拿起路径只允许拾取临时区域中的文件

对于第二部分:

2)在我的配置文件中排除文件

您可以创建一个.flake8文件库根,可以照顾这。我.flake8文件看起来像这样:

[flake8]
忽略= E501
排除=
git的,
文档/
测试/

编译/ *
最大复杂度= 16

希望这会有所帮助。