检测 mercurial 中的新行

Detect new lines in mercurial

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

在 git 中,可以检测到在提交之前添加的行号,因为它们在调用 git blame 时显示为散列号 00000000000。

在 mercurial 中,新行不会显示在 hg blame/annotate 中。是否有另一种机制可以解决这个问题?使用 hg diff 做这件事真的很痛苦。

编辑您的存储库 (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):

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 和它的标准输出是 API,我们试图保持非常稳定),您可能还对新的和实验性的修复扩展感兴趣,我认为它是根据您的用例构建的(hg help --extension fix)。