1 /*
2 * Copyright (C) 2018-2021, Andre Bossert <andre.bossert@siemens.com>
3 *
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Distribution License v. 1.0 which is available at
6 * https://www.eclipse.org/org/documents/edl-v10.php.
7 *
8 * SPDX-License-Identifier: BSD-3-Clause
9 */
10
11 package org.eclipse.jgit.internal.diffmergetool;
12
13 /**
14 * The user-defined diff tool.
15 */
16 public class UserDefinedDiffTool implements ExternalDiffTool {
17
18 private boolean available;
19
20 /**
21 * the diff tool name
22 */
23 private final String name;
24
25 /**
26 * the diff tool path
27 */
28 private String path;
29
30 /**
31 * the diff tool command
32 */
33 private final String cmd;
34
35 /**
36 * Creates the diff tool
37 *
38 * @param name
39 * the name
40 * @param path
41 * the path
42 * @param cmd
43 * the command
44 */
45 public UserDefinedDiffTool(String name, String path, String cmd) {
46 this.name = name;
47 this.path = path;
48 this.cmd = cmd;
49 }
50
51 /**
52 * @return the diff tool name
53 */
54 @Override
55 public String getName() {
56 return name;
57 }
58
59 /**
60 * The path of the diff tool.
61 *
62 * <p>
63 * The path to a pre-defined external diff tool can be overridden by
64 * specifying {@code difftool.<tool>.path} in a configuration file.
65 * </p>
66 * <p>
67 * For a user defined diff tool (that does not override a pre-defined diff
68 * tool), the path is ignored when invoking the tool.
69 * </p>
70 *
71 * @return the diff tool path
72 *
73 * @see <a href=
74 * "https://git-scm.com/docs/git-difftool">https://git-scm.com/docs/git-difftool</a>
75 */
76 @Override
77 public String getPath() {
78 return path;
79 }
80
81 /**
82 * The command of the diff tool.
83 *
84 * <p>
85 * A pre-defined external diff tool can be overridden using the tools name
86 * in a configuration file. The overwritten tool is then a user defined tool
87 * and the command of the diff tool is specified with
88 * {@code difftool.<tool>.cmd}. This command must work without prepending
89 * the value of {@link #getPath()} and can sometimes include tool
90 * parameters.
91 * </p>
92 *
93 * @return the diff tool command
94 *
95 * @see <a href=
96 * "https://git-scm.com/docs/git-difftool">https://git-scm.com/docs/git-difftool</a>
97 */
98 @Override
99 public String getCommand() {
100 return cmd;
101 }
102
103 /**
104 * @return availability of the tool: true if tool can be executed and false
105 * if not
106 */
107 @Override
108 public boolean isAvailable() {
109 return available;
110 }
111
112 /**
113 * @param available
114 * true if tool can be found and false if not
115 */
116 public void setAvailable(boolean available) {
117 this.available = available;
118 }
119
120 /**
121 * Overrides the path for the given tool. Equivalent to setting
122 * {@code difftool.<tool>.path}.
123 *
124 * @param path
125 * the new diff tool path
126 *
127 * @see <a href=
128 * "https://git-scm.com/docs/git-difftool">https://git-scm.com/docs/git-difftool</a>
129 */
130 public void setPath(String path) {
131 this.path = path;
132 }
133 }