我经常提交import pdb;pdb.set_trace()
。
有没有方便的方法阻止我这样做?
我使用emacs / git(magit)。
答案 0 :(得分:3)
为了完整性,这里是如何检查索引中版本的内容,构建eugene's answer并进行一些更改(未作为完整钩子进行测试,但应该有效):
#!/bin/sh
has_import=false
git diff --cached --no-renames --name-status --diff-filter=AM |
while read st file; do
case "$file" in
*.py)
if git show ":$file" |
grep -E "^[^#]*\bimport[[:space:]]+pdb\b"; then
echo "$file: has import pdb"
exit 1
fi;;
esac
done || has_import=true
if $has_import; then
exit 1
fi
最重要的变化是git show ":$file"
技巧,它使用git show
从索引中提取暂存版本。
我也是:
--no-renames
以使重命名的文件显示为A
dded(处理R
更难,可能只是将它们视为新的); C
,因为如果触发它会失败(因为“其他”文件名也会被打印,就像R
enames一样,但我认为它不会在这里触发); < / LI>
case
删除了一些特定于bash的语法;和from pdb import ...
,或者更可能的是import collections, pdb
之类的东西,它不会捕获;但是现在它处理了多个空格import
,并避免虚假点击,例如import pdbase
)。has_import
变量。 (如果您以后不打算使用任何内容,可以删除变量并直接使用exit 1
,如他所建议的那样。)(这仍有至少一个小缺陷:提取的文件内容没有应用任何涂抹过滤器。但如果你的涂抹和清洁过滤器添加和删除import
行,我怀疑没有任何预先commit hook可以帮到你。:-))
答案 1 :(得分:0)
您可以创建.git / hooks / pre-commit
#!/bin/bash
git diff --cached --name-status --diff-filter=ACM | while read st file; do
if [[ "$file" =~ .py$ ]] && grep "^[^#]*import pdb" "$file"; then
echo "$file: has import pdb"
exit 1
fi
done
我刚刚完成了。不确定它是否适合一般用途但对我有用。
谢谢大卫
答案 2 :(得分:0)
python3 -m pip install pre-commit
(或使用 pipx)
cd my_repo
创建一个名为 .pre-commit-config.yaml
的文件,内容如下
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.0.1
hooks:
- id: debug-statements
运行pre-commit install
下次运行 git commit
时会失败
(random) mark@DESKTOP:~/pytest-bdd$ git commit -am "Adding breakpoint"
[INFO] Initializing environment for https://github.com/pre-commit/pre-commit-hooks.
[INFO] Installing environment for https://github.com/pre-commit/pre-commit-hooks.
[INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
Debug Statements (Python)................................................Failed
- hook id: debug-statements
- exit code: 1
setup.py:2:0 - pdb imported
它不会允许你提交直到
breakpoint()
或 import pdb
从提交中删除。
注意:如果您只是删除 import pdb
而不是 pdb.set_trace()
,例如,如果您匆忙忘记,它不会抱怨 - 但您现在引入了语法错误。
有关详细信息,请参阅 https://pre-commit.com