blob: c8b04f90f2756a14bf11b5f99cf78e71bf762487 [file] [log] [blame]
/*
* Copyright (C) 2018-2021, Andre Bossert <andre.bossert@siemens.com>
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0 which is available at
* https://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
package org.eclipse.jgit.internal.diffmergetool;
import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_DIFFTOOL_SECTION;
import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_DIFF_SECTION;
import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_CMD;
import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_GUITOOL;
import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_PATH;
import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_PROMPT;
import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_TOOL;
import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_TRUST_EXIT_CODE;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.eclipse.jgit.lib.Config;
import org.eclipse.jgit.lib.Config.SectionParser;
import org.eclipse.jgit.lib.internal.BooleanTriState;
/**
* Keeps track of difftool related configuration options.
*/
public class DiffToolConfig {
/** Key for {@link Config#get(SectionParser)}. */
public static final Config.SectionParser<DiffToolConfig> KEY = DiffToolConfig::new;
private final String toolName;
private final String guiToolName;
private final boolean prompt;
private final BooleanTriState trustExitCode;
private final Map<String, ExternalDiffTool> tools;
private DiffToolConfig(Config rc) {
toolName = rc.getString(CONFIG_DIFF_SECTION, null, CONFIG_KEY_TOOL);
guiToolName = rc.getString(CONFIG_DIFF_SECTION, null,
CONFIG_KEY_GUITOOL);
prompt = rc.getBoolean(CONFIG_DIFFTOOL_SECTION, toolName,
CONFIG_KEY_PROMPT,
true);
String trustStr = rc.getString(CONFIG_DIFFTOOL_SECTION, toolName,
CONFIG_KEY_TRUST_EXIT_CODE);
if (trustStr != null) {
trustExitCode = Boolean.parseBoolean(trustStr)
? BooleanTriState.TRUE
: BooleanTriState.FALSE;
} else {
trustExitCode = BooleanTriState.UNSET;
}
tools = new HashMap<>();
Set<String> subsections = rc.getSubsections(CONFIG_DIFFTOOL_SECTION);
for (String name : subsections) {
String cmd = rc.getString(CONFIG_DIFFTOOL_SECTION, name,
CONFIG_KEY_CMD);
String path = rc.getString(CONFIG_DIFFTOOL_SECTION, name,
CONFIG_KEY_PATH);
if ((cmd != null) || (path != null)) {
tools.put(name, new UserDefinedDiffTool(name, path, cmd));
}
}
}
/**
* @return the default diff tool name (diff.tool)
*/
public String getDefaultToolName() {
return toolName;
}
/**
* @return the default GUI diff tool name (diff.guitool)
*/
public String getDefaultGuiToolName() {
return guiToolName;
}
/**
* @return the diff tool "prompt" option (difftool.prompt)
*/
public boolean isPrompt() {
return prompt;
}
/**
* @return the diff tool "trust exit code" option (difftool.trustExitCode)
*/
public boolean isTrustExitCode() {
return trustExitCode == BooleanTriState.TRUE;
}
/**
* @return the tools map
*/
public Map<String, ExternalDiffTool> getTools() {
return tools;
}
/**
* @return the tool names
*/
public Set<String> getToolNames() {
return tools.keySet();
}
}