Sfoglia il codice sorgente

Throw API exception when MergeCommand hits checkout conflicts

When MergeCommand hit checkout conflicts it did throw an internal JGit
exception org.eclipse.jgit.errors.CheckoutConflictException instead of
org.eclipse.jgit.api.errors.CheckoutConflictException which it
declares to throw. Hence translate the internal exception to the
exception declared in the API.

Bug: 327573
Change-Id: I1efcd93a43ecbf4a40583e0fc9d8d53cffc98cae
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
tags/v1.2.0.201112221803-r
Matthias Sohn 12 anni fa
parent
commit
26b5738629

+ 9
- 3
org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java Vedi File

@@ -46,6 +46,7 @@ package org.eclipse.jgit.api;
import java.io.IOException;
import java.text.MessageFormat;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -122,6 +123,7 @@ public class MergeCommand extends GitCommand<MergeResult> {
Integer.valueOf(commits.size())));

RevWalk revWalk = null;
DirCacheCheckout dco = null;
try {
Ref head = repo.getRef(Constants.HEAD);
if (head == null)
@@ -147,7 +149,7 @@ public class MergeCommand extends GitCommand<MergeResult> {
ObjectId headId = head.getObjectId();
if (headId == null) {
revWalk.parseHeaders(srcCommit);
DirCacheCheckout dco = new DirCacheCheckout(repo,
dco = new DirCacheCheckout(repo,
repo.lockDirCache(), srcCommit.getTree());
dco.setFailOnConflict(true);
dco.checkout();
@@ -176,7 +178,7 @@ public class MergeCommand extends GitCommand<MergeResult> {
// FAST_FORWARD detected: skip doing a real merge but only
// update HEAD
refLogMessage.append(": " + MergeStatus.FAST_FORWARD);
DirCacheCheckout dco = new DirCacheCheckout(repo,
dco = new DirCacheCheckout(repo,
headCommit.getTree(), repo.lockDirCache(),
srcCommit.getTree());
dco.setFailOnConflict(true);
@@ -214,7 +216,7 @@ public class MergeCommand extends GitCommand<MergeResult> {
refLogMessage.append(mergeStrategy.getName());
refLogMessage.append('.');
if (noProblems) {
DirCacheCheckout dco = new DirCacheCheckout(repo,
dco = new DirCacheCheckout(repo,
headCommit.getTree(), repo.lockDirCache(),
merger.getResultTreeId());
dco.setFailOnConflict(true);
@@ -250,6 +252,10 @@ public class MergeCommand extends GitCommand<MergeResult> {
}
}
}
} catch (org.eclipse.jgit.errors.CheckoutConflictException e) {
List<String> conflicts = (dco == null) ? Collections
.<String> emptyList() : dco.getConflicts();
throw new CheckoutConflictException(conflicts, e);
} catch (IOException e) {
throw new JGitInternalException(
MessageFormat.format(

+ 15
- 0
org.eclipse.jgit/src/org/eclipse/jgit/api/errors/CheckoutConflictException.java Vedi File

@@ -48,6 +48,20 @@ public class CheckoutConflictException extends GitAPIException {
private static final long serialVersionUID = 1L;
private List<String> conflictingPaths;

/**
* Translate internal exception to API exception
*
* @param conflictingPaths
* list of conflicting paths
*
* @param e
*/
public CheckoutConflictException(List<String> conflictingPaths,
org.eclipse.jgit.errors.CheckoutConflictException e) {
super(e.getMessage(), e);
this.conflictingPaths = conflictingPaths;
}

CheckoutConflictException(String message, Throwable cause) {
super(message, cause);
}
@@ -73,6 +87,7 @@ public class CheckoutConflictException extends GitAPIException {

/**
* Adds a new conflicting path
*
* @param conflictingPath
* @return {@code this}
*/

Loading…
Annulla
Salva