检测水银新线

时间:2019-04-12 08:42:41

标签: mercurial hook blame

我们正在研究添加预提交挂钩,以检测是否符合我们公司政策的编码标准。我们不想检测到遗留代码,只需添加新行即可。

在git中,可以检测在提交之前添加的行号,因为调用git blame时这些行号显示为哈希数00000000000。

在汞中,新行未在hg责备/注释中显示。还有另一种机制可以弄清楚这一点吗?使用hg diff确实很痛苦。

1 个答案:

答案 0 :(得分:4)

编辑您的存储库(hg config --local)或用户配置(hg config --edit)并启用预提交挂钩(hg help config.hooks):

[hooks]
pre-commit=/path/to/check-added-lines

在预提交挂钩中,使用wdir() revset和modified() + added()文件集运行以下版本的注释命令:(hg help revsetshg help filesets):< / p>

hg ann -r 'wdir()' 'set:modified() + added()'

这将为您提供批注输出,其中刚添加的行(即仅存在于您的工作目录中的行)在修订号后带有+。因此,在check-added-lines中,您可以执行类似的操作

#!/bin/bash
IFS=$'\n'
for line in $(hg ann -r 'wdir()' 'set:modified() + added()' | grep '^[0-9]*+' | sed 's/^[0-9]\++ *: //'); do
    if ! run_checker "$line"; then
        exit 1
    fi
done
exit 0

选择run_checker程序。

尽管我会毫不犹豫地建议这样做,但是如果您愿意容忍错误和潜在的API损坏(Mercurial认为未明确记录其行为为实验性,其CLI和其stdout为API,我们会尽量保持这种稳定性) ),您可能还对新的实验性扩展程序扩展感兴趣,我认为该扩展程序是根据您的用例(hg help --extension fix)构建的。