graphlog: inline node_template_for_key()

It's easier to follow than function call with 3 string parameters.
This commit is contained in:
Yuya Nishihara 2024-09-03 17:18:49 +09:00
parent 36ab165b57
commit dda0980c4d
4 changed files with 36 additions and 37 deletions

View File

@ -85,6 +85,7 @@ pub(crate) fn cmd_evolog(
let start_commit = workspace_command.resolve_single_rev(&args.revision)?; let start_commit = workspace_command.resolve_single_rev(&args.revision)?;
let diff_renderer = workspace_command.diff_renderer_for_log(&args.diff_format, args.patch)?; let diff_renderer = workspace_command.diff_renderer_for_log(&args.diff_format, args.patch)?;
let graph_style = GraphStyle::from_settings(command.settings())?;
let with_content_format = LogContentFormat::new(ui, command.settings())?; let with_content_format = LogContentFormat::new(ui, command.settings())?;
let template; let template;
@ -105,7 +106,7 @@ pub(crate) fn cmd_evolog(
node_template = workspace_command node_template = workspace_command
.parse_template( .parse_template(
&language, &language,
&get_node_template(command.settings())?, &get_node_template(graph_style, command.settings())?,
CommitTemplateLanguage::wrap_commit_opt, CommitTemplateLanguage::wrap_commit_opt,
)? )?
.labeled("node"); .labeled("node");
@ -144,7 +145,6 @@ pub(crate) fn cmd_evolog(
commits.truncate(n); commits.truncate(n);
} }
if !args.no_graph { if !args.no_graph {
let graph_style = GraphStyle::from_settings(command.settings())?;
let mut graph = get_graphlog(graph_style, formatter.raw()); let mut graph = get_graphlog(graph_style, formatter.raw());
for commit in commits { for commit in commits {
let mut edges = vec![]; let mut edges = vec![];

View File

@ -20,6 +20,7 @@ use jj_lib::repo::Repo;
use jj_lib::revset::RevsetExpression; use jj_lib::revset::RevsetExpression;
use jj_lib::revset::RevsetFilterPredicate; use jj_lib::revset::RevsetFilterPredicate;
use jj_lib::revset::RevsetIteratorExt; use jj_lib::revset::RevsetIteratorExt;
use jj_lib::settings::ConfigResultExt as _;
use jj_lib::settings::UserSettings; use jj_lib::settings::UserSettings;
use tracing::instrument; use tracing::instrument;
@ -31,7 +32,6 @@ use crate::command_error::CommandError;
use crate::commit_templater::CommitTemplateLanguage; use crate::commit_templater::CommitTemplateLanguage;
use crate::diff_util::DiffFormatArgs; use crate::diff_util::DiffFormatArgs;
use crate::graphlog::get_graphlog; use crate::graphlog::get_graphlog;
use crate::graphlog::node_template_for_key;
use crate::graphlog::Edge; use crate::graphlog::Edge;
use crate::graphlog::GraphStyle; use crate::graphlog::GraphStyle;
use crate::ui::Ui; use crate::ui::Ui;
@ -120,6 +120,7 @@ pub(crate) fn cmd_log(
let store = repo.store(); let store = repo.store();
let diff_renderer = workspace_command.diff_renderer_for_log(&args.diff_format, args.patch)?; let diff_renderer = workspace_command.diff_renderer_for_log(&args.diff_format, args.patch)?;
let graph_style = GraphStyle::from_settings(command.settings())?;
let use_elided_nodes = command let use_elided_nodes = command
.settings() .settings()
@ -145,7 +146,7 @@ pub(crate) fn cmd_log(
node_template = workspace_command node_template = workspace_command
.parse_template( .parse_template(
&language, &language,
&get_node_template(command.settings())?, &get_node_template(graph_style, command.settings())?,
CommitTemplateLanguage::wrap_commit_opt, CommitTemplateLanguage::wrap_commit_opt,
)? )?
.labeled("node"); .labeled("node");
@ -165,7 +166,6 @@ pub(crate) fn cmd_log(
let limit = args.limit.or(args.deprecated_limit).unwrap_or(usize::MAX); let limit = args.limit.or(args.deprecated_limit).unwrap_or(usize::MAX);
if !args.no_graph { if !args.no_graph {
let graph_style = GraphStyle::from_settings(command.settings())?;
let mut graph = get_graphlog(graph_style, formatter.raw()); let mut graph = get_graphlog(graph_style, formatter.raw());
let forward_iter = TopoGroupedGraphIterator::new(revset.iter_graph()); let forward_iter = TopoGroupedGraphIterator::new(revset.iter_graph());
let iter: Box<dyn Iterator<Item = _>> = if args.reversed { let iter: Box<dyn Iterator<Item = _>> = if args.reversed {
@ -297,11 +297,18 @@ pub(crate) fn cmd_log(
Ok(()) Ok(())
} }
pub fn get_node_template(settings: &UserSettings) -> Result<String, config::ConfigError> { pub fn get_node_template(
node_template_for_key( style: GraphStyle,
settings, settings: &UserSettings,
"templates.log_node", ) -> Result<String, config::ConfigError> {
"builtin_log_node", let symbol = settings
"builtin_log_node_ascii", .config()
) .get_string("templates.log_node")
.optional()?;
let default = if style.is_ascii() {
"builtin_log_node_ascii"
} else {
"builtin_log_node"
};
Ok(symbol.unwrap_or_else(|| default.to_owned()))
} }

View File

@ -15,6 +15,7 @@
use std::slice; use std::slice;
use jj_lib::op_walk; use jj_lib::op_walk;
use jj_lib::settings::ConfigResultExt as _;
use jj_lib::settings::UserSettings; use jj_lib::settings::UserSettings;
use crate::cli_util::format_template; use crate::cli_util::format_template;
@ -22,7 +23,6 @@ use crate::cli_util::CommandHelper;
use crate::cli_util::LogContentFormat; use crate::cli_util::LogContentFormat;
use crate::command_error::CommandError; use crate::command_error::CommandError;
use crate::graphlog::get_graphlog; use crate::graphlog::get_graphlog;
use crate::graphlog::node_template_for_key;
use crate::graphlog::Edge; use crate::graphlog::Edge;
use crate::graphlog::GraphStyle; use crate::graphlog::GraphStyle;
use crate::operation_templater::OperationTemplateLanguage; use crate::operation_templater::OperationTemplateLanguage;
@ -73,6 +73,7 @@ pub fn cmd_op_log(
}; };
let op_store = current_op.op_store(); let op_store = current_op.op_store();
let graph_style = GraphStyle::from_settings(command.settings())?;
let with_content_format = LogContentFormat::new(ui, command.settings())?; let with_content_format = LogContentFormat::new(ui, command.settings())?;
let template; let template;
@ -99,7 +100,7 @@ pub fn cmd_op_log(
.parse_template( .parse_template(
ui, ui,
&language, &language,
&get_node_template(command.settings())?, &get_node_template(graph_style, command.settings())?,
OperationTemplateLanguage::wrap_operation, OperationTemplateLanguage::wrap_operation,
)? )?
.labeled("node"); .labeled("node");
@ -117,7 +118,6 @@ pub fn cmd_op_log(
let limit = args.limit.or(args.deprecated_limit).unwrap_or(usize::MAX); let limit = args.limit.or(args.deprecated_limit).unwrap_or(usize::MAX);
let iter = op_walk::walk_ancestors(slice::from_ref(&current_op)).take(limit); let iter = op_walk::walk_ancestors(slice::from_ref(&current_op)).take(limit);
if !args.no_graph { if !args.no_graph {
let graph_style = GraphStyle::from_settings(command.settings())?;
let mut graph = get_graphlog(graph_style, formatter.raw()); let mut graph = get_graphlog(graph_style, formatter.raw());
for op in iter { for op in iter {
let op = op?; let op = op?;
@ -152,11 +152,18 @@ pub fn cmd_op_log(
Ok(()) Ok(())
} }
fn get_node_template(settings: &UserSettings) -> Result<String, config::ConfigError> { fn get_node_template(
node_template_for_key( style: GraphStyle,
settings, settings: &UserSettings,
"templates.op_log_node", ) -> Result<String, config::ConfigError> {
"builtin_op_log_node", let symbol = settings
"builtin_op_log_node_ascii", .config()
) .get_string("templates.op_log_node")
.optional()?;
let default = if style.is_ascii() {
"builtin_op_log_node_ascii"
} else {
"builtin_op_log_node"
};
Ok(symbol.unwrap_or_else(|| default.to_owned()))
} }

View File

@ -17,7 +17,6 @@ use std::io;
use std::io::Write; use std::io::Write;
use itertools::Itertools; use itertools::Itertools;
use jj_lib::settings::ConfigResultExt as _;
use jj_lib::settings::UserSettings; use jj_lib::settings::UserSettings;
use renderdag::Ancestor; use renderdag::Ancestor;
use renderdag::GraphRowRenderer; use renderdag::GraphRowRenderer;
@ -125,20 +124,6 @@ impl GraphStyle {
} }
} }
pub fn node_template_for_key(
settings: &UserSettings,
key: &str,
fallback: &str,
ascii_fallback: &str,
) -> Result<String, config::ConfigError> {
let symbol = settings.config().get_string(key).optional()?;
if GraphStyle::from_settings(settings)?.is_ascii() {
Ok(symbol.unwrap_or_else(|| ascii_fallback.to_owned()))
} else {
Ok(symbol.unwrap_or_else(|| fallback.to_owned()))
}
}
pub fn get_graphlog<'a, K: Clone + Eq + Hash + 'a>( pub fn get_graphlog<'a, K: Clone + Eq + Hash + 'a>(
style: GraphStyle, style: GraphStyle,
formatter: &'a mut dyn Write, formatter: &'a mut dyn Write,