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

eug*_*ene 5 python git emacs

import pdb;pdb.set_trace()经常承诺。

有什么方便的方法可以阻止我这样做吗?

我使用 emacs/git (magit)。

tor*_*rek 4

为了完整起见,以下是如何检查索引中版本的内容,构建尤金的答案并进行一些更改(未作为完整的钩子进行测试,但应该可以工作):

#!/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
Run Code Online (Sandbox Code Playgroud)

最重要的变化是git show ":$file"技巧,它用于git show从索引中提取暂存版本。

我也:

  • 添加--no-renames以使重命名的文件显示为Added (处理起来R比较困难,不妨将它们视为新文件);
  • 删除,C因为如果触发它就会失败(因为“其他”文件名也会被打印,就像Renames 一样,但我认为它无论如何都不会在这里触发);
  • 使用case;删除了一些特定于 bash 的语法 和
  • 稍微加强了 grep 表达式(它仍然不完美,您可以执行from pdb import ...,或更可能执行类似 的操作import collections, pdb,但它不会捕获;但现在它可以处理 后的多个空格import,并避免错误命中,例如import pdbase)。
  • 根据Matthieu Moy 的评论,增强了 shell 片段以设置has_import稍后可以使用的变量。(如果您以后不打算使用任何东西,您可以消除该变量并exit 1直接使用那里,正如他建议的那样。)

(这仍然至少有一个小缺陷:提取的文件内容没有应用任何污迹过滤器。但是,如果您的污迹和清洁过滤器添加和删除行import,我怀疑预提交挂钩无法为您提供任何帮助。 :-) )