如何解决pygrep预提交钩子以检查字符串是否存在
如果我想编写一个预提交钩子来检查例如源代码中是否没有字符串“ I love pre-commit”,我可以这样做
- 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
但是,如果我想做相反的事情-也就是说,检查每个源代码文件中的“我喜欢预先提交” 是?我该如何修改钩子,以便如果找不到“我爱预提交”而不会失败,而如果找不到“我爱预提交” ,它将失败?
解决方法
repos:
- repo: local
hooks:
- id: love_statement
name: Check that I love pre-commit is in source code
types: [python]
args: [--multiline]
entry: '\A((?!I love pre-commit).)*\Z'
language: pygrep
这结合了以下内容:
- 使用regex tricks中的粗略的负向后看模式
- 使用
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')
免责声明:我是预先提交的作者
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。