Mercurial расширения: эффективная реализация ключевых слов - PullRequest
0 голосов
/ 12 сентября 2018

Я пишу расширение Mercurial, но обнаружил, что рендеринг шаблонов довольно медленный.

Первоначально я использовал cmdutil.rendertemplate(), однако, похоже, что нужно повторить анализшаблонная строка каждый раз, что довольно медленно.

При переключении на «новый» API для @templatekeyword, похоже, что первый переданный аргумент является mercurial.templater.engine объект, который имеет метод expand, который кэширует проанализированные версии шаблонов, что делает его намного быстрее.К сожалению, он не расширяет псевдонимы .

Кто-нибудь знает правильный путь для эффективной визуализации шаблонов и псевдонимов для ртутного расширения?Прямо сейчас, единственный вариант, который я вижу, это копировать / вставлять части cmdutil.rendertemplate и сохранять свой собственный глобальный кеш ... но это выглядит довольно странно.

1 Ответ

0 голосов
/ 30 сентября 2018

Предположим, вам нужно

  • отрисовать пользовательский шаблон, загруженный не из секции [templates], а
  • в функции ключевого слова,

текущий способ - сначала поместить загруженный шаблон в templater.cache[name] [1] и отрендерить его с помощью context.process(name, mapping) [2].

  1. https://www.mercurial -scm.org / repo / hg / file / 4.7.1 / mercurial / cmdutil.py # l2643
  2. https://www.mercurial -scm.org / repo / hg / file / 4.7.1 / mercurial / templatekw.py # l474

Я не уверен, что это тот случай, с которым вы столкнулись.Там может быть лучший способ в зависимости от контекста.

...