mirror of
https://github.com/martinvonz/jj.git
synced 2025-01-15 16:53:25 +00:00
cli: move some template helpers to WorkspaceCommandEnvironment
These functions will be used by "op log"/"diff"/"show". This patch also changed the error type as it's obvious that there are no other errors to be returned.
This commit is contained in:
parent
1da9ebcec1
commit
e0da3ec010
1 changed files with 42 additions and 27 deletions
|
@ -162,6 +162,7 @@ use crate::revset_util::RevsetExpressionEvaluator;
|
||||||
use crate::template_builder;
|
use crate::template_builder;
|
||||||
use crate::template_builder::TemplateLanguage;
|
use crate::template_builder::TemplateLanguage;
|
||||||
use crate::template_parser::TemplateAliasesMap;
|
use crate::template_parser::TemplateAliasesMap;
|
||||||
|
use crate::template_parser::TemplateParseResult;
|
||||||
use crate::templater::PropertyPlaceholder;
|
use crate::templater::PropertyPlaceholder;
|
||||||
use crate::templater::TemplateRenderer;
|
use crate::templater::TemplateRenderer;
|
||||||
use crate::text_util;
|
use crate::text_util;
|
||||||
|
@ -692,6 +693,37 @@ impl WorkspaceCommandEnvironment {
|
||||||
Ok(Some(revset::optimize(expression)))
|
Ok(Some(revset::optimize(expression)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Parses template of the given language into evaluation tree.
|
||||||
|
///
|
||||||
|
/// `wrap_self` specifies the type of the top-level property, which should
|
||||||
|
/// be one of the `L::wrap_*()` functions.
|
||||||
|
pub fn parse_template<'a, C: Clone + 'a, L: TemplateLanguage<'a> + ?Sized>(
|
||||||
|
&self,
|
||||||
|
language: &L,
|
||||||
|
template_text: &str,
|
||||||
|
wrap_self: impl Fn(PropertyPlaceholder<C>) -> L::Property,
|
||||||
|
) -> TemplateParseResult<TemplateRenderer<'a, C>> {
|
||||||
|
let aliases = &self.template_aliases_map;
|
||||||
|
template_builder::parse(language, template_text, aliases, wrap_self)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Creates commit template language environment for this workspace and the
|
||||||
|
/// given `repo`.
|
||||||
|
pub fn commit_template_language<'a>(
|
||||||
|
&'a self,
|
||||||
|
repo: &'a dyn Repo,
|
||||||
|
id_prefix_context: &'a IdPrefixContext,
|
||||||
|
) -> CommitTemplateLanguage<'a> {
|
||||||
|
CommitTemplateLanguage::new(
|
||||||
|
repo,
|
||||||
|
&self.path_converter,
|
||||||
|
&self.workspace_id,
|
||||||
|
self.revset_parse_context(),
|
||||||
|
id_prefix_context,
|
||||||
|
&self.command.data.commit_template_extensions,
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Provides utilities for writing a command that works on a [`Workspace`]
|
/// Provides utilities for writing a command that works on a [`Workspace`]
|
||||||
|
@ -1239,21 +1271,15 @@ impl WorkspaceCommandHelper {
|
||||||
language: &L,
|
language: &L,
|
||||||
template_text: &str,
|
template_text: &str,
|
||||||
wrap_self: impl Fn(PropertyPlaceholder<C>) -> L::Property,
|
wrap_self: impl Fn(PropertyPlaceholder<C>) -> L::Property,
|
||||||
) -> Result<TemplateRenderer<'a, C>, CommandError> {
|
) -> TemplateParseResult<TemplateRenderer<'a, C>> {
|
||||||
let aliases = self.template_aliases_map();
|
self.env.parse_template(language, template_text, wrap_self)
|
||||||
Ok(template_builder::parse(
|
|
||||||
language,
|
|
||||||
template_text,
|
|
||||||
aliases,
|
|
||||||
wrap_self,
|
|
||||||
)?)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Parses commit template into evaluation tree.
|
/// Parses commit template into evaluation tree.
|
||||||
pub fn parse_commit_template(
|
pub fn parse_commit_template(
|
||||||
&self,
|
&self,
|
||||||
template_text: &str,
|
template_text: &str,
|
||||||
) -> Result<TemplateRenderer<'_, Commit>, CommandError> {
|
) -> TemplateParseResult<TemplateRenderer<'_, Commit>> {
|
||||||
let language = self.commit_template_language();
|
let language = self.commit_template_language();
|
||||||
self.parse_template(
|
self.parse_template(
|
||||||
&language,
|
&language,
|
||||||
|
@ -1264,14 +1290,8 @@ impl WorkspaceCommandHelper {
|
||||||
|
|
||||||
/// Creates commit template language environment for this workspace.
|
/// Creates commit template language environment for this workspace.
|
||||||
pub fn commit_template_language(&self) -> CommitTemplateLanguage<'_> {
|
pub fn commit_template_language(&self) -> CommitTemplateLanguage<'_> {
|
||||||
CommitTemplateLanguage::new(
|
self.env
|
||||||
self.repo().as_ref(),
|
.commit_template_language(self.repo().as_ref(), self.id_prefix_context())
|
||||||
self.path_converter(),
|
|
||||||
self.workspace_id(),
|
|
||||||
self.revset_parse_context(),
|
|
||||||
self.id_prefix_context(),
|
|
||||||
&self.env.command.data.commit_template_extensions,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Template for one-line summary of a commit.
|
/// Template for one-line summary of a commit.
|
||||||
|
@ -1888,23 +1908,18 @@ impl WorkspaceCommandTransaction<'_> {
|
||||||
let id_prefix_context = self
|
let id_prefix_context = self
|
||||||
.id_prefix_context
|
.id_prefix_context
|
||||||
.get_or_init(|| self.helper.env.new_id_prefix_context());
|
.get_or_init(|| self.helper.env.new_id_prefix_context());
|
||||||
CommitTemplateLanguage::new(
|
self.helper
|
||||||
self.tx.repo(),
|
.env
|
||||||
self.helper.path_converter(),
|
.commit_template_language(self.tx.repo(), id_prefix_context)
|
||||||
self.helper.workspace_id(),
|
|
||||||
self.helper.revset_parse_context(),
|
|
||||||
id_prefix_context,
|
|
||||||
&self.helper.env.command.data.commit_template_extensions,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Parses commit template with the current transaction state.
|
/// Parses commit template with the current transaction state.
|
||||||
pub fn parse_commit_template(
|
pub fn parse_commit_template(
|
||||||
&self,
|
&self,
|
||||||
template_text: &str,
|
template_text: &str,
|
||||||
) -> Result<TemplateRenderer<'_, Commit>, CommandError> {
|
) -> TemplateParseResult<TemplateRenderer<'_, Commit>> {
|
||||||
let language = self.commit_template_language();
|
let language = self.commit_template_language();
|
||||||
self.helper.parse_template(
|
self.helper.env.parse_template(
|
||||||
&language,
|
&language,
|
||||||
template_text,
|
template_text,
|
||||||
CommitTemplateLanguage::wrap_commit,
|
CommitTemplateLanguage::wrap_commit,
|
||||||
|
|
Loading…
Reference in a new issue