我有一个“中央”存储库,我想确保没有人使用错误的用户名推送更改。
但我无法弄清楚如何根据肯定列表创建一个测试用户名的钩子。我在Mercurial API中找到了一个
ctx.user()调用,这似乎是我想要测试我的肯定列表。
钩子也可以是一个预先挂钩,它作为存储库克隆的一部分分发,或者它可以是中央存储库上的钩子,作为预传入或类似的东西。
非常感谢任何帮助或指示。
答案 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 log
和grep
来测试提交的作者字段:
[hooks]
pretxnchangegroup.usercheck = hg log --template '{author}\n' -r \
$HG_NODE: | grep -qe 'user1\|user2\|etc'
除了usercheck失败之外,它当然没有提供非常好的反馈。但我认为现在已经足够好了。