pygrep预提交钩子检查字符串是否存在

pygrep预提交钩子检查字符串是否存在,grep,pre-commit,pre-commit.com,Grep,Pre Commit,Pre Commit.com,如果我想编写一个预提交钩子来检查,例如,字符串“我爱预提交”不在我的源代码中,我可以这样做 - repo: local hooks: - id: love_statement name: Check that I love pre-commit isn't in source code types: [python] entry: 'I love pre-commit' language: pygrep 但是,如果我想做相反的事情,也

如果我想编写一个预提交钩子来检查,例如,字符串“我爱预提交”不在我的源代码中,我可以这样做

- repo: local
  hooks:
    - id: love_statement
      name: Check that I love pre-commit isn't in source code
      types: [python]
      entry: 'I love pre-commit'
      language: pygrep
但是,如果我想做相反的事情,也就是检查每个源代码文件中是否都有“我喜欢预提交”,该怎么办?我如何修改我的钩子,以便在找到“我爱预提交”时不失败,而在没有找到“我爱预提交”时失败


现在,这可以用

args: [--negate]
您可以使用以下几种方法来执行此操作:

回购协议: -回购协议:本地 挂钩: -id:love_声明 名称:检查源代码中是否有“我爱预提交” 类型:[python] args:[--多行] 条目:'\A((?!我喜欢预提交)。*\Z' 语言:pygrep 这包括以下内容:

  • 使用来自
  • 使用
    args:[--multiline]
    pygrep
    推入整个文件匹配模式
  • ^
    $
    (每线锚定)切换到
    \A
    \Z
    (整线锚定)
下面是一个执行示例:

$ git ls-files -- '*.py' | xargs tail -n999
==> t.py <==
print('I do not love pre-commit')

==> t2.py <==
print('I love pre-commit')

$ pre-commit  run --all-files
Check that I love pre-commit is in source code...........................Failed
- hook id: love_statement
- exit code: 1

t.py:1:print('I do not love pre-commit')
$git ls文件--'*.py'| xargs tail-n999
==>t.py t2.py您可以使用以下方法:

回购协议: -回购协议:本地 挂钩: -id:love_声明 名称:检查源代码中是否有“我爱预提交” 类型:[python] args:[--多行] 条目:'\A((?!我喜欢预提交)。*\Z' 语言:pygrep
这包括以下内容:

  • 使用来自
  • 使用
    args:[--multiline]
    pygrep
    推入整个文件匹配模式
  • ^
    $
    (每线锚定)切换到
    \A
    \Z
    (整线锚定)
下面是一个执行示例:

$ git ls-files -- '*.py' | xargs tail -n999
==> t.py <==
print('I do not love pre-commit')

==> t2.py <==
print('I love pre-commit')

$ pre-commit  run --all-files
Check that I love pre-commit is in source code...........................Failed
- hook id: love_statement
- exit code: 1

t.py:1:print('I do not love pre-commit')
$git ls文件--'*.py'| xargs tail-n999

==>t.py t2.py“免责声明:我是pre-commit的作者”看起来奉承是一个很好的策略:)谢谢!我发现这个解决方案很慢,即使它可以工作-是否有一个选项可以反转
pygrep的退出代码?如果没有,你会接受拉请求来添加它吗?没有,否则我会建议这样做。如果你能展示一个真实的使用案例,你可以考虑使用PR“免责声明:我是pre-commit的作者”看起来奉承是一个很好的策略:)谢谢!我发现这个解决方案很慢,即使它可以工作-是否有一个选项可以反转
pygrep的退出代码?如果没有,你会接受拉请求来添加它吗?没有,否则我会建议这样做。如果您能够演示PR的真实用例,则可以考虑PR