Как изменить поведение по умолчанию журнала hg, чтобы показывать только предков?
Можно ли изменить поведение по умолчанию 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
}
2 ответа
Функция псевдонима 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
в другом аккаунте или контексте, который не контролируется вашим .hgrc
, (Typing hg alog
при таких же обстоятельствах возникнет только ошибка "неизвестная команда").
Хотя вы можете сделать это с помощью псевдонима (см. Ниже), самый чистый подход - это расширение:
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
(при условии, что приведенный выше код находится в /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
) существует, так что вы все еще можете получить доступ к оригиналу log
функциональность.