使用Python钩子使用ReviewBoard和Mercurial自动执行查看请求

时间:2011-10-06 14:37:20

标签: python mercurial automation mercurial-hook review-board

这是我的问题:

我有一个远程mercurial存储库,其中挂钩将设置为传入或更改组,并且我在另一台服务器上设置了ReviewBoard。 这个想法是在从开发人员推送到远程存储库时自动生成审查请求票据。 当然,我需要一个调用post-review的钩子,它也使用了使用mercurial api(ctx.user())提取的submit-as用户,否则所有的审查请求票据都将以用户名为将远程存储库连接到评论板服务器。

我的主要困境实际上是获得开始修订和停止修订,如果我使用传入,我将获得所有更改集节点,但当然每次都会调用钩子,因此每次调用之间都没有保持状态。另一方面,如果我使用changegroup,我只获得第一个变更集,我无法进行比较。对于比较,我需要一种方法来保持上一个提示基本上将其发送到后期审核:

post-review --revision-range=previoustip:newtip --submit-as=ctx.user() 

如果您对如何解决问题有任何想法,我会很高兴。我明显在python中编写钩子。

1 个答案:

答案 0 :(得分:7)

不确定这是否是您所需要的,但这是我用于在几乎相同的情况下执行提交消息检查的东西,它必须检查每个更改并根据用户验证信息。以同样的方式,我需要检查更改列表的用户,而不是'推送'用户。 在循环更改组中的更改时,为“特定用户”构建更改集以及“块”中的开始和结束修订应该相当容易。

返回是因为它被用作pretxnchangegroup hook

def checkAllCommitMessage(ui, repo, node, **kwargs):
    """    
    Checks all inbound changeset messages from a push for adherence to the commit message rules.
    """

    # for each change being submitted
    # get all the details, and call the trigger
    fail = False

    for rev in xrange(repo[node].rev(), len(repo)):
        # get context (change)
        ctx = repo[rev]

        # user who commited the change (NOT necessarily the one who is doing push)
        user = ctx.user()

        # do the hook stuff here...
        # set fail to True if something goes wrong

    return fail