From 4e30fc7215c691ab6f0a12bf0ae7ad8ab4de5887 Mon Sep 17 00:00:00 2001 From: Yuya Nishihara Date: Thu, 9 Jan 2025 21:59:56 +0900 Subject: [PATCH] templater: pass RepoLoader to OperationTemplateLanguage UserSettings will be obtained from there. If operation template supported "self.repo() -> Repo" method, RepoLoader would be needed. It's equivalent to Repo in CommitTemplateLanguage. --- cli/src/cli_util.rs | 2 +- cli/src/commands/operation/log.rs | 2 +- cli/src/operation_templater.rs | 10 ++++++---- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/cli/src/cli_util.rs b/cli/src/cli_util.rs index 8365becfa..7d0e534a6 100644 --- a/cli/src/cli_util.rs +++ b/cli/src/cli_util.rs @@ -1717,7 +1717,7 @@ to the current parents may contain changes from multiple commits. /// Creates operation template language environment for this workspace. pub fn operation_template_language(&self) -> OperationTemplateLanguage { OperationTemplateLanguage::new( - self.repo().op_store().root_operation_id(), + self.workspace.repo_loader(), Some(self.repo().op_id()), self.env.operation_template_extensions(), ) diff --git a/cli/src/commands/operation/log.rs b/cli/src/commands/operation/log.rs index 77d5492bb..53bb6ad9d 100644 --- a/cli/src/commands/operation/log.rs +++ b/cli/src/commands/operation/log.rs @@ -108,7 +108,7 @@ fn do_op_log( let op_node_template; { let language = OperationTemplateLanguage::new( - repo_loader.op_store().root_operation_id(), + repo_loader, Some(current_op.id()), workspace_env.operation_template_extensions(), ); diff --git a/cli/src/operation_templater.rs b/cli/src/operation_templater.rs index 50b1bc717..eda021dca 100644 --- a/cli/src/operation_templater.rs +++ b/cli/src/operation_templater.rs @@ -22,6 +22,7 @@ use jj_lib::extensions_map::ExtensionsMap; use jj_lib::object_id::ObjectId; use jj_lib::op_store::OperationId; use jj_lib::operation::Operation; +use jj_lib::repo::RepoLoader; use crate::template_builder; use crate::template_builder::merge_fn_map; @@ -49,7 +50,7 @@ pub trait OperationTemplateLanguageExtension { } pub struct OperationTemplateLanguage { - root_op_id: OperationId, + repo_loader: RepoLoader, current_op_id: Option, build_fn_table: OperationTemplateBuildFnTable, cache_extensions: ExtensionsMap, @@ -59,7 +60,7 @@ impl OperationTemplateLanguage { /// Sets up environment where operation template will be transformed to /// evaluation tree. pub fn new( - root_op_id: &OperationId, + repo_loader: &RepoLoader, current_op_id: Option<&OperationId>, extensions: &[impl AsRef], ) -> Self { @@ -74,7 +75,8 @@ impl OperationTemplateLanguage { } OperationTemplateLanguage { - root_op_id: root_op_id.clone(), + // Clone these to keep lifetime simple + repo_loader: repo_loader.clone(), current_op_id: current_op_id.cloned(), build_fn_table, cache_extensions, @@ -336,7 +338,7 @@ fn builtin_operation_methods() -> OperationTemplateBuildMethodFnMap { "root", |language, _diagnostics, _build_ctx, self_property, function| { function.expect_no_arguments()?; - let root_op_id = language.root_op_id.clone(); + let root_op_id = language.repo_loader.op_store().root_operation_id().clone(); let out_property = self_property.map(move |op| op.id() == &root_op_id); Ok(L::wrap_boolean(out_property)) },