所以,我想创建一个基本的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)
答案 0 :(得分: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)