aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/api/CheckoutCommand.java22
1 files changed, 14 insertions, 8 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/CheckoutCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/CheckoutCommand.java
index 854e0b8c9..e03805b72 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/api/CheckoutCommand.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/CheckoutCommand.java
@@ -160,15 +160,21 @@ public class CheckoutCommand extends GitCommand<Ref> {
.parseCommit(headId);
RevCommit newCommit = revWalk.parseCommit(branch);
RevTree headTree = headCommit == null ? null : headCommit.getTree();
- DirCacheCheckout dco = new DirCacheCheckout(repo, headTree,
- repo.lockDirCache(), newCommit.getTree());
- dco.setFailOnConflict(true);
+ DirCacheCheckout dco;
+ DirCache dc = repo.lockDirCache();
try {
- dco.checkout();
- } catch (org.eclipse.jgit.errors.CheckoutConflictException e) {
- status = new CheckoutResult(Status.CONFLICTS, dco
- .getConflicts());
- throw new CheckoutConflictException(dco.getConflicts(), e);
+ dco = new DirCacheCheckout(repo, headTree, dc,
+ newCommit.getTree());
+ dco.setFailOnConflict(true);
+ try {
+ dco.checkout();
+ } catch (org.eclipse.jgit.errors.CheckoutConflictException e) {
+ status = new CheckoutResult(Status.CONFLICTS,
+ dco.getConflicts());
+ throw new CheckoutConflictException(dco.getConflicts(), e);
+ }
+ } finally {
+ dc.unlock();
}
Ref ref = repo.getRef(name);
if (ref != null && !ref.getName().startsWith(Constants.R_HEADS))