PackedBatchRefUpdate#execute: reduce nesting of try-catch blocks
Change-Id: I7ddf20fcbf4971ee908b20d8df9d6328ce9f9f1b
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackedBatchRefUpdate.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackedBatchRefUpdate.java
index a9e05c9..106313d 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackedBatchRefUpdate.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackedBatchRefUpdate.java
@@ -158,6 +158,7 @@ public void execute(RevWalk walk, ProgressMonitor monitor,
}
Map<String, LockFile> locks = null;
+ LockFile packedRefsLock = null;
refdb.inProcessPackedRefsLock.lock();
try {
// During clone locking isn't needed since no refs exist yet.
@@ -168,35 +169,29 @@ public void execute(RevWalk walk, ProgressMonitor monitor,
if (locks == null) {
return;
}
- try {
- refdb.pack(locks);
- } catch (LockFailedException e) {
- lockFailure(pending.get(0), pending);
- return;
- }
+ refdb.pack(locks);
}
- LockFile packedRefsLock = refdb.lockPackedRefs();
- if (packedRefsLock == null) {
- lockFailure(pending.get(0), pending);
+ packedRefsLock = refdb.lockPackedRefsOrThrow();
+ PackedRefList oldPackedList = refdb.refreshPackedRefs();
+ RefList<Ref> newRefs = applyUpdates(walk, oldPackedList, pending);
+ if (newRefs == null) {
return;
}
- try {
- PackedRefList oldPackedList = refdb.refreshPackedRefs();
- RefList<Ref> newRefs = applyUpdates(walk, oldPackedList, pending);
- if (newRefs == null) {
- return;
- }
- refdb.commitPackedRefs(packedRefsLock, newRefs, oldPackedList,
- true);
- } finally {
- // This will be no-op if commitPackedRefs is successful as it
- // will remove the lock file (by renaming over real file).
- packedRefsLock.unlock();
- }
+ refdb.commitPackedRefs(packedRefsLock, newRefs, oldPackedList,
+ true);
+ } catch (LockFailedException e) {
+ lockFailure(pending.get(0), pending);
+ return;
} finally {
try {
unlockAll(locks);
+ if (packedRefsLock != null) {
+ // This will be no-op if commitPackedRefs is successful as
+ // it will remove the lock file (by renaming over real
+ // file).
+ packedRefsLock.unlock();
+ }
} finally {
refdb.inProcessPackedRefsLock.unlock();
}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java
index 57dbd38..0416a64 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java
@@ -853,7 +853,7 @@ LockFile lockPackedRefs() throws IOException {
return null;
}
- private LockFile lockPackedRefsOrThrow() throws IOException {
+ LockFile lockPackedRefsOrThrow() throws IOException {
LockFile lck = lockPackedRefs();
if (lck == null) {
throw new LockFailedException(packedRefsFile);