hg在传出的mq钩子上中止

时间:2013-06-04 08:42:01

标签: mercurial mercurial-queue hgrc

我正在尝试运行hg pull -u,但它会出现以下错误:

searching for changes
/bin/sh: !: not found
abort: preoutgoing.mq-no-push hook exited with status 1

我的.hgrc包含了这个钩子,我猜这是导致问题的原因:

preoutgoing.mq-no-push = ! hg qtop > /dev/null 2>&1

hg incoming为我提供了我所期望的更改列表,并且本地或远程存储库中没有mq补丁(hg qappliedhg qseries不返回任何内容。)

简单的解决方法是注释掉我的.hgrc文件的这一部分。然后我可以拉,但在合并时我发现我的存储库中有多个头,是什么导致错误?如果是这样,更准确的错误消息可能会很好。如果没有,是否有人有更好的解决方法?

2 个答案:

答案 0 :(得分:0)

错误消息准确无误。问题是mq-no-push挂钩退出状态为1. Mercuial不知道挂钩是什么,所以除了返回代码之外它不能告诉你任何东西。由钩子本身提供一个有意义的消息,告诉你为什么不能推动它。

如果你看一下中止行之前的输出,你会发现问题是你的shell /bin/sh找不到命令!,这意味着钩子实际上并没有工作并使我相信钩子格式不正确。我对Linux / Unix / MacOSX shell知之甚少,不知道解决方案是什么。我查看了mq extension页面,你所拥有的配置与给出的示例相同,所以我想知道你的shell中是否有错误的设置。

答案 1 :(得分:0)

事实证明,我的/bin/sh是jsh,它以不同的方式定义!。为了解决这个问题,我更改了.hgrc文件中的命令,以显式调用bash,如下所示:

prechangegroup.mq-no-pull = bash -c "! hg qtop > /dev/null 2>&1"
preoutgoing.mq-no-push = bash -c "! hg qtop > /dev/null 2>&1"