如何关闭hg状态-S

时间:2012-06-01 21:25:37

标签: mercurial

我希望我的默认hg状态可以重新定位到subrepos。这很容易在.hgrc中完成:

[alias]
status = status -S

但是我希望有另一个别名,例如hg status-no-subrepo,但不是。

[alias]
status-no-subrepo = status

不幸的是,这不起作用,因为status-no-subrepo --expands-to - > status --expands-to - >状态-S。我想在这一点上有一些东西可以阻止递归。

有什么想法吗?


顺便说一句,这似乎违反了Glew的一条规则:任何可以打开的命令行选项都应该可以关闭。可能-S == -S:1,-S:0关闭。

2 个答案:

答案 0 :(得分:2)

简单,将您的原始别名用不同的名称

[alias]
sstat = status -S

我知道,这不是你要找的答案,但这很容易。这也意味着如果你移动到没有安装别名的系统(你会收到正确的错误提醒你),你不会感到困惑,而其他人在你的帐户中做事时不会感到困惑。

我无法告诉你,有多少次我帮助过某些人,只是为了让他们感到恼火,因为他们已ls别名ls -lrmrm -i。< / p>

总的来说,我认为用个性化版本覆盖常见命令是错误的。

答案 1 :(得分:1)

运行status时,您需要停用status-no-subrepo别名。

[alias]
status = status -S
status-no-subrepo = !$HG --config alias.status=status status $@

我不使用subrepos,但我使用我的glog别名测试了类似的功能。

glog = !$HG log --graph --branch $($HG branch) $@
glog-all-branches = !$HG --config alias.glog=glog glog $@

!告诉Mercurial这是一个shell命令,而不是Mercurial子命令。运行shell命令时,Mercurial会将$ HG设置为运行hg可执行文件的路径。别名后的参数默认情况下不会传递给shell命令,因此$@会将它们添加回来。这允许您运行hg status-no-subrepo --no-status之类的命令来显示没有子目录的更改并隐藏状态前缀。