虽然可以实现这一目标用别名(见下文),这里的清洁方法是一个扩展:
from mercurial import extensions, commands
testedwith = "3.5"
default_log_rev = "reverse(ancestors(.))"
def override_log(original_cmd, ui, repo, *pats, **opts):
have_rev = False
for opt in ["rev", "branch"]:
if opts.has_key(opt) and opts[opt]:
have_rev = True
if not have_rev:
opts["rev"] = [default_log_rev]
return original_cmd(ui, repo, *pats, **opts)
def uisetup(ui):
extensions.wrapcommand(commands.table, "log", override_log)
这只会使用新的默认值,如果既没有--rev
也不--branch
选项(或它们的缩写-r
和-b
)log
被设置,因此如果其中之一被提供则保留原始行为。
您可以用通常的方式安装这样的扩展,通过添加类似以下到您的~/.hgrc
IE(假设上面的代码是在/path/to/logdefault.py
):
[extensions]
logdefault = /path/to/logdefault.py
如果某分机是重量级的你,你也可以在你~/.hgrc
创建别名:
[alias]
log = log --rev 'reverse(ancestors(.))'
rawlog = !$HG --config alias.log=log log "[email protected]"
第二别名(rawlog
)的存在使得您仍然可以访问原来的log
功能。
什么是关于扩展的“更清洁”?对于一些可以用简单的选项完成的事情来说,这似乎是一种可怕的矫枉过正,因此可以很容易地将其封装在一个别名中。 – alexis
它更清洁,不会破坏'hg log -r'的正常功能。扩展可以检查是否已经有修改参数,并且在这种情况下不提供默认参数;一个别名不能。 –
对,那么当你重写原来的名字时有必要......谢谢。 – alexis