我们目前使用svn,并通过钩子的用户,能够确保每个提交消息的前缀都是一个bug数字(它将这些提交与Bugzilla问题跟踪器中的问题报告联系起来)。
我们希望转移到所有分发的善意。 但是hg的好处之一就是开发人员不一定需要在线提交更改,所以我们不希望钩子脚本根据我们的中央Bugzilla资源validation错误号。
我可能从svn的angular度来看太多了,但我想我想要的是开发人员能够在开发人员决定将其变更推向中央testing回购时指定一个错误编号。 这里的关键要求是,我们希望能够将提交与Bugzilla的bug联系起来,但我们不希望为开发人员提供复杂的手动工作stream程(例如,Attic扩展似乎强加于此)。
有任何想法吗?
要记住的重要一点是,变更集(几乎)是不可变的,这意味着当开发人员运行hg push时,添加错误编号为时已晚。 推命令只是移动变化集,而不是改变它们。
然而,当推送到中央存储库时, hg push当然是开发人员在线的最佳时机。 所以你可以要求开发者安装一个钩子
[hooks] pre-push.bugzilla = pick-bug-number.sh
pick-bug-number.sh脚本应该首先检查开发人员是否推送到您的中央存储库(而不是在他们的笔记本电脑上的其他存储库),然后询问他们的错误编号。 当开发人员input错误号时,脚本可以查看hg outgoing ,并将传出的更改与Bugzilla中的错误相关联。
这是将变更集与外部问题跟踪器相关联的一种方式。 在变更集中不会有任何东西将他们绑定到Bugzilla的错误 – 只有Bugzilla知道变更集属于哪个错误。
另一种方法是将bug编号embedded到变更集中 。 这可以使用Mercurial中的命名分支完成。 让你的开发者运行
$ hg branch bug-123
然后开始工作在123号错误。下面的提交将包含“bug-123”标签。 推送到服务器时,很容易parsing推送的变更集(在变更changegroup挂钩中)并更新Bugzilla。
您也可以让开发人员将bug编号放入提交消息中,就像Subversion一样。 不会有任何在线validation,但他们可以像Subversion一样遵循相同的工作stream程。 validation提交消息最好通过configurationui.editor完成。 使它成为一个自定义的脚本,将要求一个错误号,把它放到提交消息模板中,然后启动和编辑器让开发人员input提交消息。
如果您计划拥有数千个错误号,使用提交消息比使用命名分支更好。 Mercurial本身可以很好地扩展命名分支的数量,但许多工具希望能够在一个下拉菜单中显示所有分支。 如果你有10到20个,那么这个工作正常,但是如果你有5个,那么这个工作就会失败。 这真的是一个UI的东西,但它可能会回来,咬你很长时间,你已经开始这个系统。
例如,你可以在服务器端运行cron脚本,检查mercurial日志(使用hg log),然后用你在日志中发现的问题号更新Bugzilla。 例如参数–date 2011-01-26到hg log在特定date只给出日志消息,比每次所有日志条目处理要快得多。
推送到服务器时,只有在提交时才能添加消息。