flake8,仅限于diff和exclude

时间:2014-10-30 14:54:54

标签: git pep8 flake8

我正在尝试在我的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

现在我正在测试,这些都不起作用。有人有什么想法吗?

4 个答案:

答案 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错误...或更改文件中的所有行上的报告。