blob: 40cb82060227d9fc42e51a0b98175b7fdfa8e524 [file] [log] [blame]
/*
* Copyright (C) 2018-2022, 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_KEY_CMD;
import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_GUITOOL;
import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_KEEP_BACKUP;
import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_KEEP_TEMPORARIES;
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 static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_WRITE_TO_TEMP;
import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_MERGETOOL_SECTION;
import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_MERGE_SECTION;
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 merge tool related configuration options.
*/
public class MergeToolConfig {
/** Key for {@link Config#get(SectionParser)}. */
public static final Config.SectionParser<MergeToolConfig> KEY = MergeToolConfig::new;
private final String toolName;
private final String guiToolName;
private final boolean prompt;
private final boolean keepBackup;
private final boolean keepTemporaries;
private final boolean writeToTemp;
private final Map<String, ExternalMergeTool> tools;
private MergeToolConfig(Config rc) {
toolName = rc.getString(CONFIG_MERGE_SECTION, null, CONFIG_KEY_TOOL);
guiToolName = rc.getString(CONFIG_MERGE_SECTION, null,
CONFIG_KEY_GUITOOL);
prompt = rc.getBoolean(CONFIG_MERGETOOL_SECTION, toolName,
CONFIG_KEY_PROMPT, true);
keepBackup = rc.getBoolean(CONFIG_MERGETOOL_SECTION,
CONFIG_KEY_KEEP_BACKUP, true);
keepTemporaries = rc.getBoolean(CONFIG_MERGETOOL_SECTION,
CONFIG_KEY_KEEP_TEMPORARIES, false);
writeToTemp = rc.getBoolean(CONFIG_MERGETOOL_SECTION,
CONFIG_KEY_WRITE_TO_TEMP, false);
tools = new HashMap<>();
Set<String> subsections = rc.getSubsections(CONFIG_MERGETOOL_SECTION);
for (String name : subsections) {
String cmd = rc.getString(CONFIG_MERGETOOL_SECTION, name,
CONFIG_KEY_CMD);
String path = rc.getString(CONFIG_MERGETOOL_SECTION, name,
CONFIG_KEY_PATH);
BooleanTriState trustExitCode = BooleanTriState.FALSE;
String trustStr = rc.getString(CONFIG_MERGETOOL_SECTION, name,
CONFIG_KEY_TRUST_EXIT_CODE);
if (trustStr != null) {
trustExitCode = Boolean.valueOf(trustStr).booleanValue()
? BooleanTriState.TRUE
: BooleanTriState.FALSE;
} else {
trustExitCode = BooleanTriState.UNSET;
}
if ((cmd != null) || (path != null)) {
tools.put(name, new UserDefinedMergeTool(name, path, cmd,
trustExitCode));
}
}
}
/**
* Get default tool name
*
* @return the default merge tool name (merge.tool)
*/
public String getDefaultToolName() {
return toolName;
}
/**
* Get default GUI tool name
*
* @return the default GUI merge tool name (merge.guitool)
*/
public String getDefaultGuiToolName() {
return guiToolName;
}
/**
* Get mergetool.prompt option
*
* @return the merge tool "prompt" option (mergetool.prompt)
*/
public boolean isPrompt() {
return prompt;
}
/**
* Get tool "keep backup" option
*
* @return the tool "keep backup" option
*/
public boolean isKeepBackup() {
return keepBackup;
}
/**
* Get tool "keep temporaries" option
*
* @return the tool "keepTemporaries" option
*/
public boolean isKeepTemporaries() {
return keepTemporaries;
}
/**
* Get the tool "write to temp" option
*
* @return the tool "write to temp" option
*/
public boolean isWriteToTemp() {
return writeToTemp;
}
/**
* Get the tools map
*
* @return the tools map
*/
public Map<String, ExternalMergeTool> getTools() {
return tools;
}
/**
* Get tool names
*
* @return the tool names
*/
public Set<String> getToolNames() {
return tools.keySet();
}
}