Mercurial 如何将hg日志的默认行为更改为仅显示祖先?
是否可以将Mercurial 如何将hg日志的默认行为更改为仅显示祖先?,mercurial,hg-log,Mercurial,Hg Log,是否可以将hg log的默认行为更改为仅显示当前祖先 例如: hg log --rev "reverse(ancestors(.))" 问题是,我总是想hglog这样做 我知道我可以在我的.bashrc中做类似的事情,但我想知道是否有一种反复无常的方法可以做到这一点 hg () { if [[ $2 -eq "log" ]] then # TODO: Append other arguments to this... hg log --rev
hg log
的默认行为更改为仅显示当前祖先
例如:
hg log --rev "reverse(ancestors(.))"
问题是,我总是想hglog
这样做
我知道我可以在我的.bashrc
中做类似的事情,但我想知道是否有一种反复无常的方法可以做到这一点
hg () {
if [[ $2 -eq "log" ]]
then
# TODO: Append other arguments to this...
hg log --rev "reverse(ancestors(.))"
else
# Run the command
fi
}
虽然您可以通过别名(见下文)实现这一点,但这里最干净的方法是扩展:
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)
只有在未设置-log
的--rev
或--branch
选项(或其缩写-r
和-b
)的情况下,才会使用新的默认值,从而在提供其中一个选项时保留原始行为
您可以以通常的方式安装这样的扩展,即通过向~/.hgrc
中添加以下内容(假设上述代码位于/path/to/logdefault.py
):
如果您的扩展是重量级的,您还可以在~/.hgrc
中创建别名:
[alias]
log = log --rev 'reverse(ancestors(.))'
rawlog = !$HG --config alias.log=log log "$@"
第二个别名(
rawlog
)的存在使您仍然可以访问原始的log
功能。虽然您可以使用别名(见下文)来实现这一点,但这里最干净的方法是扩展:
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)
只有在未设置-log
的--rev
或--branch
选项(或其缩写-r
和-b
)的情况下,才会使用新的默认值,从而在提供其中一个选项时保留原始行为
您可以以通常的方式安装这样的扩展,即通过向~/.hgrc
中添加以下内容(假设上述代码位于/path/to/logdefault.py
):
如果您的扩展是重量级的,您还可以在~/.hgrc
中创建别名:
[alias]
log = log --rev 'reverse(ancestors(.))'
rawlog = !$HG --config alias.log=log log "$@"
第二个别名(
rawlog
)存在,因此您仍然可以访问原始的log
功能。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
的别名不仅会阻止您访问原始行为(需要另一个别名恢复原始含义);更重要的是,一旦你开始期待非标准行为,当你在另一个不受你的.hgrc
控制的帐户或上下文中键入hglog
时,你迟早会被咬。(在相同的情况下键入hg alog
只会导致“未知命令”错误)。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
的别名不仅会阻止您访问原始行为(需要另一个别名恢复原始含义);更重要的是,一旦你开始期待非标准行为,当你在另一个不受你的.hgrc
控制的帐户或上下文中键入hglog
时,你迟早会被咬。(在相同的情况下键入hgalog
只会导致“未知命令”错误)。扩展名的“更干净”是什么?对于一个简单的选项就可以完成的事情来说,这似乎是可怕的过度使用,因此可以很容易地封装在别名中。它更干净,因为它不会破坏hg log-r
的正常功能。扩展可以检查是否已经存在修订参数,并且在这种情况下不提供默认值;别名不能。对,那么当你覆盖原始名称时它是有必要的。。。谢谢。分机的“清洁”是什么?对于一个简单的选项就可以完成的事情来说,这似乎是可怕的过度使用,因此可以很容易地封装在别名中。它更干净,因为它不会破坏hg log-r
的正常功能。扩展可以检查是否已经存在修订参数,并且在这种情况下不提供默认值;别名不能。对,那么当你覆盖原始名称时它是有必要的。。。谢谢