2

そこで、コミットメッセージに文字列を追加する基本的なMercurial拡張機能を作成したいと思います。以下に示すコードはファイルに配置され、。myextension.pyによって含まれ.hgrcます。

を実行するhg commit -m "A message"と、コミットエディタが開き、"A message APPENDED"期待どおりのメッセージが表示されます。ただし、CTRL + Xを押してコミットを中止しようとすると、コミットはまだ完全なメッセージが追加された状態で発生します。

私はここで何が間違っているのですか?

from mercurial import commands, extensions

def commit(originalcommit, ui, repo, *pats, **opts):

    if not opts["message"]:
        return originalcommit(ui, repo, *pats, **opts)
    else:
        opts["force_editor"] = True
        opts["message"] += " APPENDED"
        return originalcommit(ui, repo, *pats, **opts)

def uisetup(ui):
    extensions.wrapcommand(commands.table, 'commit', commit)
4

1 に答える 1

1

Mercurial がエディターに渡す一時ファイルには既にコミット メッセージが含まれているため、これは正しい動作だと思います。cmdutil.commitforceeditor 関数にモンキーパッチを適用することで、これをある程度オーバーライドできます。

from mercurial import commands, extensions, cmdutil, util

cfe = cmdutil.commitforceeditor

def commitforceeditor(repo, ctx, subs):
    text = cfe(repo, ctx, subs)

    # Do not commit unless the commit message differs from 
    # the one you specified on the command line
    if ctx.description() == text.strip():
        raise util.Abort("empty commit message")
    else:
        return text

def commit(originalcommit, ui, repo, *pats, **opts):
    if not opts["message"]:
        return originalcommit(ui, repo, *pats, **opts)
    else:
        opts["force_editor"] = True
        opts["message"] += " APPENDED"

        # monkey-patch
        cmdutil.commitforceeditor = commitforceeditor

        return originalcommit(ui, repo, *pats, **opts)

def uisetup(ui):
    extensions.wrapcommand(commands.table, 'commit', commit)  
于 2012-09-14T10:42:14.517 に答える