我正在尝试在我的git diff中的已更改文件的预提交挂钩中运行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跳过我传入的文件,因为它在exclude变量中。
我也希望它排除不是.py文件的文件。例如:
flake8 example.js
现在我正在测试,这些都不起作用。有人有什么想法吗?
答案 0 :(得分:5)
如果您正在使用更改的未提交和暂存的python文件上运行flake8,那么这个单线程就可以解决问题:
flake8 $(git status -s | grep -E '\.py$' | cut -c 4-)
git status列出已更改的文件,grep为python,删除开头的M / S位。
要使其成为预提交钩子,您需要添加shell hashbang:
#!/bin/sh
flake8 $(git status -s | grep -E '\.py$' | cut -c 4-)
将其保存为.git / hooks / pre-commit,chmod + x。
答案 1 :(得分:0)
您的问题分为两部分:
1)仅在我的git>中的已更改文件的预提交挂钩中运行flake8 DIFF
对于仅在diff文件(已经暂存)上运行flake8,我将.git / hooks / pre-commit脚本修改为如下:
!/ bin / sh的
export PATH = / usr / local / bin:$ PATH
export files = $(git diff --staged --name-only HEAD)
echo $文件
如果[$ files!="" ]
然后
flake8 $文件
fi
我正在使用export PATH=/usr/local/bin:$PATH
,因为我通常从sourceTree提交,它没有选择flake8所在的路径
--staged
选项仅允许拾取临时区域中的文件
第二部分:
2)排除配置文件中的文件
您可以在存储库根目录中创建一个可以处理此问题的.flake8文件。我的.flake8文件如下所示:
[flake8]
ignore = E501
排除=
git的,
文档/ ,
测试/ ,
建立/ *
max-complexity = 16
希望这有帮助。
答案 2 :(得分:0)
如果您想使用flake8
在提交前检查文件,只需使用
$ flake8 --install-hook git
ref:https://flake8.pycqa.org/en/latest/user/using-hooks.html
答案 3 :(得分:0)
有一个项目lint-diffs
仅对diff文件运行一个linter,并将结果与diff输出进行匹配。
它适用于flake8和pylint。而且,它只能报告差异文件中的行上的linter错误...或更改文件中的所有行上的报告。