3

Можно обновить до определенного тега или ветви с помощью команды hg update <branch-or-tag> . Тем не менее, встроенное завершение показывает мне только теги (не ветви). Поэтому, когда я hg update и нажимаю tab, я получаю список тегов, но без веток. Можно ли добавить ветки в этот список?

Или это может быть ошибка в Mercurial?

Я использую zsh и oh-my-zsh с Mercurial, установленным через Homebrew.

4 ответа4

3

Текущий код _hg (Zsh 5.0.2) дополняется только тегами:

краткий обзор источника _hg (функция завершения для mercurial) показывает, что завершение для hq update (реализованное функцией _hg_cmd_update действительно возвращает только ревизии и теги:

_hg_cmd_update() {
  _arguments -s -w : $_hg_global_opts \
  '(--clean -C)'{-C,--clean}'[overwrite locally modified files]' \
  '(--rev -r)'{-r+,--rev}'[revision]:revision:_hg_tags' \
  ':revision:_hg_tags'
}

Расположение: я думаю, что проще всего было бы вызвать locate _hq , но обычно я ожидаю, что функция будет в /usr/share/zsh/5.0.2/functions . Точная подпапка может измениться из-за параметров установки. Самое безопасное - это загрузить tar-шар 5.0.2 и посмотреть на zsh-5.0.2/Completion/Unix/Command/_hg

1

У меня была такая же проблема с Ubuntu 16.04 по умолчанию zsh 5.1.1 .

Чтобы обойти это, я просто пропатчил вручную /usr/share/zsh/functions/Completion/Unix/_hg

Замена функции _hg_tags()

_hg_tags() {
  local expl
  typeset -a hglabels
  hglabels=( ${(f)"$(_hg_cmd debugnamecomplete -q 2>/dev/null)"} )
  _wanted labels expl 'labels' compadd -a - hglabels
}

Изменить: Стоит отметить, что я использую Mercurial (version 3.7.3) как debugnamecomplete не на всех версиях Mercurial . Вы можете легко проверить, поддерживает ли используемая вами версия, hg debugnamecomplete . Если не поддерживается, просто обновите Mercurial.

1

Я решил проблему hg up автозаполнением веток, переписав функцию _hg_tags() следующим образом:

_hg_tags() {
  typeset -a tags
  local tag rev

  _hg_cmd tags 2> /dev/null | while read tag
  do
    tags+=(${tag/ #    [0-9]#:*})
  done
  _hg_cmd branches 2> /dev/null | while read tag
  do
    tags+=(${tag/ #    [0-9]#:*})
  done
  (( $#tags )) && _describe -t tags 'tags' tags
}
0

Версия скрипта завершения вкладки для Mercurial, которая поставляется с zsh, немного устарела (не поддерживает закладки или ветки). В ртутном источнике есть более свежая версия. Похоже, homebrew не устанавливает этот скрипт, поэтому я обнаружил, что лучше всего скачать исходный код mercurial и добавить скрипт zsh_completion в zsh fpath.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .