From 9df9a2b963b4c5a5869ca8d37baa63a4313ab30e Mon Sep 17 00:00:00 2001 From: LTLA Date: Fri, 1 Dec 2023 13:26:36 -0800 Subject: [PATCH] Added an unlocking function. --- src/lock.js | 6 ++++++ src/probation.js | 4 ++-- tests/lock.test.js | 3 +++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/lock.js b/src/lock.js index cd3fd7d..3c4d91b 100644 --- a/src/lock.js +++ b/src/lock.js @@ -15,6 +15,12 @@ export async function lockProject(project, asset, version, user_name) { return; } +export async function unlockProject(project, asset, version) { + let bound_bucket = s3.getR2Binding(); + let lck = pkeys.lock(project, asset); + await bound_bucket.delete(lck); +} + export async function checkLock(project, asset, version, user_name) { let bound_bucket = s3.getR2Binding(); let lck = pkeys.lock(project, asset); diff --git a/src/probation.js b/src/probation.js index 121f65f..03d7eaf 100644 --- a/src/probation.js +++ b/src/probation.js @@ -34,7 +34,7 @@ export async function approveProbationHandler(request, nonblockers) { throw new utils.HttpError("failed to update version summary", 500); } } finally { - await bound_bucket.delete(pkeys.lock(project, asset)); + await lck.unlockProject(project, asset); } return new Response(null, { status: 200 }); @@ -70,7 +70,7 @@ export async function rejectProbationHandler(request, nonblockers) { await utils.quickRecursiveDelete(project + "/" + asset + "/" + version + "/"); } finally { - await bound_bucket.delete(pkeys.lock(project, asset)); + await lck.unlockProject(project, asset); } return new Response(null, { status: 200 }); diff --git a/tests/lock.test.js b/tests/lock.test.js index 80dd360..74b58c9 100644 --- a/tests/lock.test.js +++ b/tests/lock.test.js @@ -16,4 +16,7 @@ test("project locking works as expected", async () => { expect(await lock.isLocked("test-lock-test", "locker")).toBe(true); expect(await lock.isLocked("test-lock-test", "other")).toBe(false); + + await lock.unlockProject("test-lock-test", "locker"); + expect(await lock.isLocked("test-lock-test", "locker")).toBe(false); })