通过允许您将工作目录指定为名为“”的伪修订版,以下 Mercurial 扩展应该可以满足您的需求=
。
"""wdir diff
Allows specifying the working directory as a pseudo revision.
"""
testedwith = "3.5"
wdir_pseudo_rev = "="
from mercurial import commands, extensions
def wrap_diff(original_cmd, ui, repo, *pats, **opts):
revargs = opts["rev"]
if len(revargs) == 1:
if revargs[0] == wdir_pseudo_rev:
return
elif len(revargs) == 2:
if revargs[0] == wdir_pseudo_rev:
if revargs[1] == wdir_pseudo_rev:
return
else:
revargs.remove(wdir_pseudo_rev)
elif revargs[1] == wdir_pseudo_rev:
revargs.remove(wdir_pseudo_rev)
opts["reverse"] = not opts["reverse"]
return original_cmd(ui, repo, *pats, **opts)
def uisetup(ui):
extensions.wrapcommand(commands.table, "diff", wrap_diff)
如果您不想处理扩展的麻烦,同样的逻辑也可以很容易地在脚本或其他程序代码中编码,您只需区分四种不同的情况:
假设您要区分 REV1 和 REV2,其中任一修订都可能是工作目录:
- 如果 REV1 和 REV2 都代表工作目录,则什么也不做。
- 如果 REV1 代表工作目录,而 REV2 是实际修订版,请使用
hg diff -r REV2
.
- 如果 REV1 是实际修订版,而 REV2 代表工作目录,请使用
hg diff --reverse -r REV1
.
- 如果 REV1 和 REV2 都是实际修订版,请使用
hg diff -r REV1 -r REV2
.