检查我的提交是否在emacs / git中有'import pdb'?

时间:2014-01-23 02:12:45

标签: python git emacs

我经常提交import pdb;pdb.set_trace()

有没有方便的方法阻止我这样做?

我使用emacs / git(magit)。

3 个答案:

答案 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的语法;和
  • 加强了grep表达式(它仍然不完美,你可以做from pdb import ...,或者更可能的是import collections, pdb之类的东西,它不会捕获;但是现在它处理了多个空格import,并避免虚假点击,例如import pdbase)。
  • per Matthieu Moy's comment,加强了shell片段以设置稍后可以使用的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

更多钩子见https://pre-commit.com/hooks.html