소스 검색

Unlock DirCache in case of occurring exception

A DirCache was not unlocked if an exception occurred in the
DirCacheCheckout constructor.

Bug: 365449
Change-Id: I231d902d52e3e5e9a7748eedaa63a2bb889ebb13
Signed-off-by: Jens Baumgart <jens.baumgart@sap.com>
tags/v2.0.0.201206130900-r
Jens Baumgart 12 년 전
부모
커밋
0a84ad2d2a
1개의 변경된 파일14개의 추가작업 그리고 8개의 파일을 삭제
  1. 14
    8
      org.eclipse.jgit/src/org/eclipse/jgit/api/CheckoutCommand.java

+ 14
- 8
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))

Loading…
취소
저장