16

我正在编写一个变化无常的变更组挂钩。我还没有把所有的事情都弄清楚,但是我必须不断地承诺和推动只是为了测试我正在进行的工作,这让试错的过程变得更加痛苦。

有没有办法“伪造”一个触发器来执行我的变更组挂钩,并使用存储库的当前状态用于它的参数?

任何有助于简化此过程的帮助将不胜感激。谢谢尼克

4

2 回答 2

18

恐怕没有内置的调试功能。我在编写钩子时所做的是设置两个本地存储库:

$ hg init repo
$ hg clone repo clone

然后changegrouprepo. 现在进入clone并做

$ echo a > a
$ hg add a
$ hg commit -m 'a file'

设置clone。每次我想检查钩子时,我都会运行

$ hg push; hg  -R ../repo rollback

里面clone。我把它保存在我的命令行历史记录中,这样我就可以按↑</kbd> + Return to execute it again and again. The hg rollback is the key: is effectively cancels the hg push so that I can repeat it again and again.

你当然需要根据你的钩子的需要来调整它。如果钩子检查提交者名称,则hg commit -u someone根据需要使用它来设置。如果钩子需要变更组中的多个变更集,则在推送之前进行两次或更多提交 - 回滚将负责删除所有推送的变更集。如果钩子由 运行hgweb,则运行

$ hg serve --config 'web.push_ssl=no' --config 'web.allow_push=*'

在一个终端中服务repo,而您在另一个终端中推到它。

于 2012-03-06T23:11:58.263 回答
6

我最近一直在使用 API 为 Mercurial 编写一个 python 钩子。为了测试它,我在存储库文件夹中启动 python 解释器后做了以下操作。

from mercurial import ui, hg
repo = hg.repository(ui.ui(), '.')
execfile('./myhook.py')
myhook(repo.ui, repo, 'hash', 'outgoing')

您的钩子函数在哪里myhook(位于myhook.pyhashoutgoing

如果您的挂钩未按预期运行,您可以修改脚本并再次执行最后两行以重试。

于 2012-04-02T18:12:30.397 回答