防止使用预提交挂钩提交pdb或pytest set_trace

时间:2016-10-12 15:30:35

标签: python git githooks

我想创建一个git pre commit hook,以阻止取消注释pytest.set_trace()pdb.set_trace()以及其他.set_trace()。这是因为我经常从命令行调试,有时会忘记我在代码中留下了调试语句。通过使用预提交钩子,我应该能够在将来避免这种情况。

Keul's Blog有一个解决方案,但会话必须在git repo的根目录下才能正常工作,否则会抱怨。

我基本上希望not等同于grep

#(\s+)?.*\.set_trace\(\)

请参阅regexr测试

由于

1 个答案:

答案 0 :(得分:1)

正确的正则表达式为^\s?[^#]+\.set_trace\(\)

说明:

  1. ^
  2. 开头
  3. \s?匹配一个空格或更多或没有空格
  4. [^#]+匹配除#之外的所有字符
  5. \.set_trace\(\)与任何以.set_trace()结尾的函数匹配
    • 我们可以通过只包含pdbpytest set_trace来更加明确,但是可能还有其他包含set_trace的软件包

示例python代码

import pdb

if __name__ == "__main__":
      pdb.set_trace()
      pytest.set_trace()
      # pdb.set_trace()
      #       pytest.set_trace()
      #pytest.set_trace()
# pdb.set_trace()
      # somethingelse.set_trace()

使用ripgrep

进行验证
$ rg '^\s?[^#]+\.set_trace\(\)'
main.py
4:      pdb.set_trace()
5:      pytest.set_trace()

现在,我们可以使用git-secrets来阻止我们

$ git secrets --add '^\s?[^#]+\.set_trace\(\)'
$ git add main.py
$ git commit -m 'test'
main.py:4:      pdb.set_trace()
main.py:5:      pytest.set_trace()