Расширения Mercurial: эффективная реализация ключевых слов
Я пишу расширение Mercurial, но обнаружил, что рендеринг шаблонов довольно медленный.
Я изначально использовал cmdutil.rendertemplate()
Однако, кажется, что каждый раз приходится анализировать строку шаблона, что довольно медленно.
При переходе на "новый" API для @templatekeyword
похоже, что первый аргумент mercurial.templater.engine
объект, который имеет expand
метод, который кэширует проанализированные версии шаблонов, что делает его намного быстрее. К сожалению, это не расширяет псевдонимы.
Кто-нибудь знает правильный путь для эффективного рендеринга шаблонов и псевдонимов для ртутного расширения? Прямо сейчас, единственный вариант, который я вижу, это копировать / вставлять части cmdutil.rendertemplate
и сохраняю свой глобальный кеш... но это выглядит довольно неприлично.
1 ответ
Предположим, вам нужно
- визуализировать пользовательский шаблон, загруженный не из
[templates]
раздел, - в функции ключевого слова,
текущий способ - поместить загруженный шаблон в templater.cache[name]
сначала [1], и отрендерить его context.process(name, mapping)
[2].
- https://www.mercurial-scm.org/repo/hg/file/4.7.1/mercurial/cmdutil.py
- https://www.mercurial-scm.org/repo/hg/file/4.7.1/mercurial/templatekw.py
Я не уверен, что это тот случай, с которым вы сталкиваетесь. Там может быть лучший способ в зависимости от контекста.