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);