1 /* 2 * Copyright (C) 2013, Christian Halstrick <christian.halstrick@sap.com> 3 * and other copyright owners as documented in the project's IP log. 4 * 5 * This program and the accompanying materials are made available 6 * under the terms of the Eclipse Distribution License v1.0 which 7 * accompanies this distribution, is reproduced below, and is 8 * available at http://www.eclipse.org/org/documents/edl-v10.php 9 * 10 * All rights reserved. 11 * 12 * Redistribution and use in source and binary forms, with or 13 * without modification, are permitted provided that the following 14 * conditions are met: 15 * 16 * - Redistributions of source code must retain the above copyright 17 * notice, this list of conditions and the following disclaimer. 18 * 19 * - Redistributions in binary form must reproduce the above 20 * copyright notice, this list of conditions and the following 21 * disclaimer in the documentation and/or other materials provided 22 * with the distribution. 23 * 24 * - Neither the name of the Eclipse Foundation, Inc. nor the 25 * names of its contributors may be used to endorse or promote 26 * products derived from this software without specific prior 27 * written permission. 28 * 29 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 30 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 31 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 32 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 33 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 34 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 35 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 36 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 37 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 38 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 40 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 41 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 42 */ 43 44 package org.eclipse.jgit.errors; 45 46 import java.io.IOException; 47 import java.text.MessageFormat; 48 49 import org.eclipse.jgit.internal.JGitText; 50 import org.eclipse.jgit.merge.RecursiveMerger; 51 52 /** 53 * Exception thrown if a merge fails because no merge base could be determined. 54 * 55 * @since 3.0 56 */ 57 public class NoMergeBaseException extends IOException { 58 private static final long serialVersionUID = 1L; 59 60 private MergeBaseFailureReason reason; 61 62 /** 63 * An enum listing the different reason why no merge base could be 64 * determined. 65 */ 66 public static enum MergeBaseFailureReason { 67 /** 68 * Multiple merge bases have been found (e.g. the commits to be merged 69 * have multiple common predecessors) but the merge strategy doesn't 70 * support this (e.g. ResolveMerge) 71 */ 72 MULTIPLE_MERGE_BASES_NOT_SUPPORTED, 73 74 /** 75 * The number of merge bases exceeds {@link RecursiveMerger#MAX_BASES} 76 */ 77 TOO_MANY_MERGE_BASES, 78 79 /** 80 * In order to find a single merge base it may required to merge 81 * together multiple common predecessors. If during these merges 82 * conflicts occur the merge fails with this reason 83 */ 84 CONFLICTS_DURING_MERGE_BASE_CALCULATION 85 } 86 87 88 /** 89 * Construct a NoMergeBase exception 90 * 91 * @param reason 92 * the reason why no merge base could be found 93 * @param message 94 * a text describing the problem 95 */ 96 public NoMergeBaseException(MergeBaseFailureReason reason, String message) { 97 super(MessageFormat.format(JGitText.get().noMergeBase, 98 reason.toString(), message)); 99 this.reason = reason; 100 } 101 102 /** 103 * Construct a NoMergeBase exception 104 * 105 * @param reason 106 * the reason why no merge base could be found 107 * @param message 108 * a text describing the problem 109 * @param why 110 * an exception causing this error 111 */ 112 public NoMergeBaseException(MergeBaseFailureReason reason, String message, 113 Throwable why) { 114 super(MessageFormat.format(JGitText.get().noMergeBase, 115 reason.toString(), message)); 116 this.reason = reason; 117 initCause(why); 118 } 119 120 /** 121 * Get the reason why no merge base could be found 122 * 123 * @return the reason why no merge base could be found 124 */ 125 public MergeBaseFailureReason getReason() { 126 return reason; 127 } 128 }