mirror of
https://github.com/martinvonz/jj.git
synced 2025-02-07 13:00:08 +00:00
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:
parent
601b75c556
commit
d7ad054168
2 changed files with 19 additions and 18 deletions
|
@ -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) => {
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in a new issue