Mercurial钩子在推送到存储库时测试用户名是否有效

时间:2011-04-15 11:19:50

标签: mercurial mercurial-hook

我有一个“中央”存储库,我想确保没有人使用错误的用户名推送更改。

但我无法弄清楚如何根据肯定列表创建一个测试用户名的钩子。我在Mercurial API中找到了一个

ctx.user()
调用,这似乎是我想要测试我的肯定列表。

钩子也可以是一个预先挂钩,它作为存储库克隆的一部分分发,或者它可以是中央存储库上的钩子,作为预传入或类似的东西。

非常感谢任何帮助或指示。

2 个答案:

答案 0 :(得分:4)

我在Bitbucket上发布了两个功能示例。这两个示例都用于搜索某些特定格式文本的提交消息(如问题跟踪案例ID),但可以轻松修改以针对有效用户列表检查用户。

The first example实际上是一个包含'commit'命令的Mercurial extension。如果找不到合适的文本(或您的案例中的有效用户),它将阻止提交发生。您可以通过添加以下行来在.hgrc文件中启用此功能:

[extensions]
someName = path/to/script/commit-msg-check.py

The second example使用进程内的pretxncommit钩子,它在提交之前但在它成为永久性之前运行。如果此检查失败,它将自动回滚提交。您可以通过添加这些行来在.hgrc文件中启用它(假设您保留了相同的文件/函数名称):

[hooks]
pretxncommit.example = python:commit-msg-check-hook.CheckForIssueRecord

您可以在这些钩子中执行您喜欢的任何Python代码,因此可以通过多种方式完成用户验证。

答案 1 :(得分:1)

感谢dls。

的例子

最后,我决定将其作为pretxnchangegroup挂钩运行,然后使用hg loggrep来测试提交的作者字段:

[hooks]
pretxnchangegroup.usercheck = hg log --template '{author}\n' -r \ 
$HG_NODE: | grep -qe 'user1\|user2\|etc'

除了usercheck失败之外,它当然没有提供非常好的反馈。但我认为现在已经足够好了。