Расширения Mercurial: эффективная реализация ключевых слов

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

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

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

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

1 ответ

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

  • визуализировать пользовательский шаблон, загруженный не из [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
  2. https://www.mercurial-scm.org/repo/hg/file/4.7.1/mercurial/templatekw.py

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

Другие вопросы по тегам