Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mercurial 如何将hg日志的默认行为更改为仅显示祖先?_Mercurial_Hg Log - Fatal编程技术网

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
的正常功能。扩展可以检查是否已经存在修订参数,并且在这种情况下不提供默认值;别名不能。对,那么当你覆盖原始名称时它是有必要的。。。谢谢