From f1a9adf7da3cd130a0233aad3f31e2917317c13a Mon Sep 17 00:00:00 2001 From: Matthias Sohn Date: Tue, 18 Apr 2023 11:00:54 +0200 Subject: [PATCH] PackedBatchRefUpdate#execute: reduce nesting of try-catch blocks Change-Id: I7ddf20fcbf4971ee908b20d8df9d6328ce9f9f1b --- .../storage/file/PackedBatchRefUpdate.java | 39 ++++++++----------- .../internal/storage/file/RefDirectory.java | 2 +- 2 files changed, 18 insertions(+), 23 deletions(-) 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 a9e05c92a..106313db6 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 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 newRefs = applyUpdates(walk, oldPackedList, pending); + if (newRefs == null) { return; } - try { - PackedRefList oldPackedList = refdb.refreshPackedRefs(); - RefList 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 57dbd389f..0416a648e 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);