1 /*
2 * Copyright (C) 2013, Christian Halstrick <christian.halstrick@sap.com> and others
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.errors;
12
13 import java.io.IOException;
14 import java.text.MessageFormat;
15
16 import org.eclipse.jgit.internal.JGitText;
17 import org.eclipse.jgit.merge.RecursiveMerger;
18
19 /**
20 * Exception thrown if a merge fails because no merge base could be determined.
21 *
22 * @since 3.0
23 */
24 public class NoMergeBaseException extends IOException {
25 private static final long serialVersionUID = 1L;
26
27 private MergeBaseFailureReason reason;
28
29 /**
30 * An enum listing the different reason why no merge base could be
31 * determined.
32 */
33 public enum MergeBaseFailureReason {
34 /**
35 * Multiple merge bases have been found (e.g. the commits to be merged
36 * have multiple common predecessors) but the merge strategy doesn't
37 * support this (e.g. ResolveMerge)
38 */
39 MULTIPLE_MERGE_BASES_NOT_SUPPORTED,
40
41 /**
42 * The number of merge bases exceeds {@link RecursiveMerger#MAX_BASES}
43 */
44 TOO_MANY_MERGE_BASES,
45
46 /**
47 * In order to find a single merge base it may required to merge
48 * together multiple common predecessors. If during these merges
49 * conflicts occur the merge fails with this reason
50 */
51 CONFLICTS_DURING_MERGE_BASE_CALCULATION
52 }
53
54
55 /**
56 * Construct a NoMergeBase exception
57 *
58 * @param reason
59 * the reason why no merge base could be found
60 * @param message
61 * a text describing the problem
62 */
63 public NoMergeBaseException(MergeBaseFailureReason reason, String message) {
64 super(MessageFormat.format(JGitText.get().noMergeBase,
65 reason.toString(), message));
66 this.reason = reason;
67 }
68
69 /**
70 * Construct a NoMergeBase exception
71 *
72 * @param reason
73 * the reason why no merge base could be found
74 * @param message
75 * a text describing the problem
76 * @param why
77 * an exception causing this error
78 */
79 public NoMergeBaseException(MergeBaseFailureReason reason, String message,
80 Throwable why) {
81 super(MessageFormat.format(JGitText.get().noMergeBase,
82 reason.toString(), message));
83 this.reason = reason;
84 initCause(why);
85 }
86
87 /**
88 * Get the reason why no merge base could be found
89 *
90 * @return the reason why no merge base could be found
91 */
92 public MergeBaseFailureReason getReason() {
93 return reason;
94 }
95 }