忽略mercurial hook

时间:2015-06-04 15:54:28

标签: python mercurial hook

我有一个像这样的善变的钩子:

[hooks]
pretxncommit.myhook = python:path/to/file:myhook

代码如下:

def myhook(ui, repo, **kwargs):
    #do some stuff

但是这个钩子运行在使用提交逻辑做其他事情的命令上,在我的例子hg shelve中。有没有办法获取用户输入的命令,以避免在该命令上运行挂钩?

也许是这样的:

def myhook(ui, repo, command, **kwargs):
      if command is "hg shelve"
           return 0
      #do some stuff

1 个答案:

答案 0 :(得分:2)

不幸的是答案似乎是否定的。我刚调试到hg 3.1的钩子机制,并且关于发出哪个命令的信息没有传播到钩子函数中。我能想到的唯一方法是使用调试器api破解丑陋的东西,从调用堆栈中提取信息。

另一个黑客将是检查sys.argv,但我担心这也是非常不可靠的(因为它无法检测是否通过Command Server执行了某些事情)。

顺便说一句,我使用这个代码片段附加调试器:

def myhook(ui, repo, **kwargs):
    print kwargs
    from pdb import set_trace
    set_trace()