【问题标题】:How do you access the commit message in a Mercurial in-process hook?如何在 Mercurial 进程内挂钩中访问提交消息?
【发布时间】:2011-01-27 22:29:24
【问题描述】:

我一直在努力

def debug_hook(ui, repo, **kwargs):
    changectx = repo[None]
    ui.status('change.desc: %s\n' % changectx.description())
    return True

但它总是打印一个空字符串。这是因为它是一个预提交钩子并且消息还不可用吗?还是我只是遗漏了一些明显的东西?

【问题讨论】:

    标签: api mercurial pre-commit-hook commit-message


    【解决方案1】:

    原来我最初的方法有两个问题:

    1. 正如 jk 所指出的,precommit 事件发生在提交之前,因此正在处理的提交的元数据还不存在。改用pretxncommit,元数据存在,但事务尚未提交到数据库。
    2. 使用changectx = repo[None] 可为您提供工作目录的更改上下文。但是我们想要当前提交的信息,因此使用 changectx = repo['tip'] 可以为我们提供最新的元数据。

    请注意,如果您将changectx = repo['tip']precommit 事件一起使用,您实际上会处理最后一次提交,而不是您正在处理的当前提交。

    【讨论】:

    • 是的,虽然“这个钩子可以访问与几乎新的变更集相关的元数据,但它不应该对这些数据做任何永久性的事情。它也不能修改工作目录。”
    • 这就是为什么在 Stack Overflow 上鼓励提问和回答自己的问题。一年多后,这个答案对我很有帮助,因为我正在浏览可用于 HG API 的very sparse documentation
    【解决方案2】:

    我认为你是对的,预先提交的消息还不存在。如果你使用 pretxncommit 它会,但我不能 100% 确定它允许你在那个时候做什么,因为交易几乎完成了。

    【讨论】:

    • 事实证明这是答案的一部分(使用 pretxncommit)。我会发布一个包含详细信息的答案。
    猜你喜欢
    • 2015-05-21
    • 1970-01-01
    • 2015-03-09
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    相关资源
    最近更新 更多