PackedBatchRefUpdate#execute: reduce nesting of try-catch blocks

Change-Id: I7ddf20fcbf4971ee908b20d8df9d6328ce9f9f1b
This commit is contained in:
Matthias Sohn 2023-04-18 11:00:54 +02:00
parent 8f8bc703e9
commit f1a9adf7da
2 changed files with 18 additions and 23 deletions

View File

@ -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();
}

View File

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