merge_tools: inline get_tool_config_from_args()

I'm going to split get_tool_config() to fix "diff --tool=:builtin", and it
doesn't make sense to duplicate get_tool_config_from_args() per backing
get_tool_config() functions.
This commit is contained in:
Yuya Nishihara 2024-02-28 21:21:01 +09:00
parent 601b75c556
commit d7ad054168
2 changed files with 19 additions and 18 deletions

View file

@ -38,6 +38,7 @@ use tracing::instrument;
use unicode_width::UnicodeWidthStr as _;
use crate::cli_util::{CommandError, WorkspaceCommandHelper};
use crate::config::CommandNameAndArgs;
use crate::formatter::Formatter;
use crate::merge_tools::{self, ExternalMergeTool, MergeTool};
use crate::text_util;
@ -144,8 +145,12 @@ fn default_diff_format(settings: &UserSettings) -> Result<DiffFormat, config::Co
let config = settings.config();
if let Some(args) = config.get("ui.diff.tool").optional()? {
// External "tool" overrides the internal "format" option.
let tool = merge_tools::get_tool_config_from_args(settings, &args)?
.unwrap_or_else(|| MergeTool::External(ExternalMergeTool::with_diff_args(&args)));
let tool = if let CommandNameAndArgs::String(name) = &args {
merge_tools::get_tool_config(settings, name)?
} else {
None
}
.unwrap_or_else(|| MergeTool::External(ExternalMergeTool::with_diff_args(&args)));
match tool {
MergeTool::Builtin => {}
MergeTool::External(tool) => {

View file

@ -210,25 +210,17 @@ pub fn get_tool_config(
}
}
/// Loads merge tool options from `[merge-tools.<name>]` if `args` is of
/// unstructured string type.
pub fn get_tool_config_from_args(
settings: &UserSettings,
args: &CommandNameAndArgs,
) -> Result<Option<MergeTool>, ConfigError> {
match args {
CommandNameAndArgs::String(name) => get_tool_config(settings, name),
CommandNameAndArgs::Vec(_) | CommandNameAndArgs::Structured { .. } => Ok(None),
}
}
fn get_diff_editor_from_settings(
ui: &Ui,
settings: &UserSettings,
) -> Result<MergeTool, ExternalToolError> {
let args = editor_args_from_settings(ui, settings, "ui.diff-editor")?;
let editor = get_tool_config_from_args(settings, &args)?
.unwrap_or_else(|| MergeTool::External(ExternalMergeTool::with_edit_args(&args)));
let editor = if let CommandNameAndArgs::String(name) = &args {
get_tool_config(settings, name)?
} else {
None
}
.unwrap_or_else(|| MergeTool::External(ExternalMergeTool::with_edit_args(&args)));
Ok(editor)
}
@ -237,8 +229,12 @@ fn get_merge_tool_from_settings(
settings: &UserSettings,
) -> Result<MergeTool, ExternalToolError> {
let args = editor_args_from_settings(ui, settings, "ui.merge-editor")?;
let mergetool = get_tool_config_from_args(settings, &args)?
.unwrap_or_else(|| MergeTool::External(ExternalMergeTool::with_merge_args(&args)));
let mergetool = if let CommandNameAndArgs::String(name) = &args {
get_tool_config(settings, name)?
} else {
None
}
.unwrap_or_else(|| MergeTool::External(ExternalMergeTool::with_merge_args(&args)));
match mergetool {
MergeTool::External(mergetool) if mergetool.merge_args.is_empty() => {
Err(ExternalToolError::MergeArgsNotConfigured {