| /* |
| * 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)); |
| } |
| } |
| } |
| |
| /** |
| * @return the default merge tool name (merge.tool) |
| */ |
| public String getDefaultToolName() { |
| return toolName; |
| } |
| |
| /** |
| * @return the default GUI merge tool name (merge.guitool) |
| */ |
| public String getDefaultGuiToolName() { |
| return guiToolName; |
| } |
| |
| /** |
| * @return the merge tool "prompt" option (mergetool.prompt) |
| */ |
| public boolean isPrompt() { |
| return prompt; |
| } |
| |
| /** |
| * @return the tool "keep backup" option |
| */ |
| public boolean isKeepBackup() { |
| return keepBackup; |
| } |
| |
| /** |
| * @return the tool "keepTemporaries" option |
| */ |
| public boolean isKeepTemporaries() { |
| return keepTemporaries; |
| } |
| |
| /** |
| * @return the tool "write to temp" option |
| */ |
| public boolean isWriteToTemp() { |
| return writeToTemp; |
| } |
| |
| /** |
| * @return the tools map |
| */ |
| public Map<String, ExternalMergeTool> getTools() { |
| return tools; |
| } |
| |
| /** |
| * @return the tool names |
| */ |
| public Set<String> getToolNames() { |
| return tools.keySet(); |
| } |
| |
| } |