是否可以更改hg log
的默认行为以仅显示当前的祖先?
即:
hg log --rev "reverse(ancestors(.))"
问题是,我始终希望hg log
这样做。
我知道我可以在.bashrc
中做这样的事情,但我想知道是否有一种善变的方式来做这件事。
hg () {
if [[ $2 -eq "log" ]]
then
# TODO: Append other arguments to this...
hg log --rev "reverse(ancestors(.))"
else
# Run the command
fi
}
答案 0 :(得分:4)
虽然你可以使用别名来实现这一点(见下文),但这里最干净的方法是扩展:
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
的{{1}}和--branch
选项(或其缩写-r
和-b
)都未设置,则此操作仅会使用您的新默认设置,如果提供其中一个,则保留原始行为。
您可以通常的方式安装此类扩展程序,即在log
中添加以下内容(假设上述代码位于~/.hgrc
中):
/path/to/logdefault.py
如果扩展名是重量级的,您还可以在[extensions]
logdefault = /path/to/logdefault.py
中创建别名:
~/.hgrc
存在第二个别名([alias]
log = log --rev 'reverse(ancestors(.))'
rawlog = !$HG --config alias.log=log log "$@"
),以便您仍然可以访问原始rawlog
功能。
答案 1 :(得分:1)
hg
的别名功能是正确的工具。虽然您可以创建修改内置命令默认行为的别名,但hg config
("alias"
部分)有以下内容:
Note:
It is possible to create aliases with the same names as existing
commands, which will then override the original definitions. This is
almost always a bad idea!
建议的做法是创建别名alog
,只需训练您的手指键入hg alog
而不是hg log
。将其放在~/.hgrc
(或等效的)中就可以了:
[alias]
alog = log --rev "reverse(ancestors(.))"
为什么这是一个更好的解决方案? log
的别名不仅会阻止您访问原始行为(还需要另一个别名,这些别名可以回溯原始含义);更重要的是,一旦您开始期待非标准行为,当您在另一个帐户或上下文中键入hg log
时,您迟早会得到一点不受{{1 }}。 (在相同情况下键入.hgrc
只会产生"未知命令"错误。)