3

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

但我不知道如何制作一个钩子来测试用户名与肯定列表。我在 Mercurial API 中发现了一个

ctx.user()
这似乎是我想要测试我的正面清单的原因。

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

任何帮助或指示将不胜感激。

4

2 回答 2

4

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

第一个示例实际上是包装了“提交”命令的Mercurial 扩展。如果它无法找到适当的文本(或您的情况下的有效用户),它将完全阻止提交。您可以通过添加以下行在 .hgrc 文件中启用此功能:

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

第二个示例使用进程内 pretxncommit 钩子,该钩子在提交完成后到永久提交之前运行。如果此检查失败,它将自动回滚提交。您可以通过添加以下行在 .hgrc 文件中启用此功能(假设您保留相同的文件/函数名称):

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

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

于 2011-04-16T04:02:43.567 回答
1

感谢示例 dls。

最后我决定将它作为一个pretxnchangegroup钩子运行,然后使用hg logandgrep来测试提交的作者字段:

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

除了 usercheck failed 之外,它当然不会提供很好的反馈。但我认为现在已经足够好了。

于 2011-04-26T09:44:01.120 回答