Throw formal CheckoutConflictException on hard reset This will allow calling classes to have access to the conflicts that occurred during the attempted checkout. Even though setFailOnConflict(false) is called on the DirCacheCheckout a CheckoutConflictException can still be thrown if cleanup fails. Change-Id: Iea7ad3176a1b0e8606a643de8945e276718eb3ce Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/ResetCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/ResetCommand.java index a6d425e..2498480 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/ResetCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/ResetCommand.java
@@ -47,6 +47,7 @@ import java.util.Collection; import java.util.LinkedList; +import org.eclipse.jgit.api.errors.CheckoutConflictException; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.api.errors.JGitInternalException; import org.eclipse.jgit.dircache.DirCache; @@ -136,7 +137,7 @@ public ResetCommand(Repository repo) { * * @return the Ref after reset */ - public Ref call() throws GitAPIException { + public Ref call() throws GitAPIException, CheckoutConflictException { checkCallable(); Ref r; @@ -366,13 +367,19 @@ public void apply(DirCacheEntry ent) { } } - private void checkoutIndex(RevCommit commit) throws IOException { + private void checkoutIndex(RevCommit commit) throws IOException, + GitAPIException { DirCache dc = repo.lockDirCache(); try { DirCacheCheckout checkout = new DirCacheCheckout(repo, dc, commit.getTree()); checkout.setFailOnConflict(false); - checkout.checkout(); + try { + checkout.checkout(); + } catch (org.eclipse.jgit.errors.CheckoutConflictException cce) { + throw new CheckoutConflictException(checkout.getConflicts(), + cce); + } } finally { dc.unlock(); }