轻松,无痛的方式测试新的mercurial钩子(正在进行的工作)

Nic*_*ngs 16 python mercurial mercurial-hook

我正在编写一个mercurial changegroup hook.我还没有想到所有的东西,但是由于我必须继续承诺并且只是为了测试我正在进行的工作,因此试错的过程变得更加痛苦.

是否有任何方法可以"伪造"触发器来执行我的changegroup钩子,并使用存储库的当前状态来使用它的参数?

任何帮助简化这一过程的人都将非常感激.谢谢尼克

Mar*_*ler 18

我担心没有内置的调试功能.编写钩子时我要做的是设置两个本地存储库:

$ hg init repo
$ hg clone repo clone
Run Code Online (Sandbox Code Playgroud)

然后配置changegroup挂钩repo.现在进去clone

$ echo a > a
$ hg add a
$ hg commit -m 'a file'
Run Code Online (Sandbox Code Playgroud)

设置clone.每次我想检查钩子,我跑

$ hg push; hg  -R ../repo rollback
Run Code Online (Sandbox Code Playgroud)

在里面clone.我在命令行历史记录中保留它,以便我可以按+ Return一次又一次地执行它.该hg rollback是关键:被有效地消除了hg push,这样我可以一次又一次地重复.

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

$ hg serve --config 'web.push_ssl=no' --config 'web.allow_push=*'
Run Code Online (Sandbox Code Playgroud)

在一个终端服务repo,而你推到它的另一端.


Nic*_*ick 6

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

from mercurial import ui, hg
repo = hg.repository(ui.ui(), '.')
execfile('./myhook.py')
myhook(repo.ui, repo, 'hash', 'outgoing')
Run Code Online (Sandbox Code Playgroud)

myhook您的钩子函数(位于myhook.py)中的哪个位置是您hash要测试钩子的变更集的哈希值,并且outgoing是钩子类型.

如果您的钩子没有按预期运行,您可以修改脚本并再次执行最后两行以重试.