This is an automated email from the ASF dual-hosted git repository.
sbp pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tooling-trusted-release.git
The following commit(s) were added to refs/heads/main by this push:
new 9ba0a14 Move the code to delete an empty directory to the release
writer
9ba0a14 is described below
commit 9ba0a14141b9b59ff1a53fd83d1c0f68c10c914a
Author: Sean B. Palmer <[email protected]>
AuthorDate: Thu Sep 11 20:02:32 2025 +0100
Move the code to delete an empty directory to the release writer
---
atr/routes/finish.py | 21 ++++++---------------
atr/storage/writers/release.py | 17 +++++++++++++++++
2 files changed, 23 insertions(+), 15 deletions(-)
diff --git a/atr/routes/finish.py b/atr/routes/finish.py
index 365815b..7f02784 100644
--- a/atr/routes/finish.py
+++ b/atr/routes/finish.py
@@ -38,6 +38,7 @@ import atr.revision as revision
import atr.routes as routes
import atr.routes.mapping as mapping
import atr.routes.root as root
+import atr.storage as storage
import atr.template as template
import atr.util as util
@@ -264,25 +265,15 @@ async def _delete_empty_directory(
respond: Respond,
) -> tuple[quart_response.Response, int] | response.Response:
try:
- description = f"Delete empty directory {dir_to_delete_rel} via web
interface"
- async with revision.create_and_manage(
- project_name, version_name, session.uid, description=description
- ) as creating:
- path_to_remove = creating.interim_path / dir_to_delete_rel
-
path_to_remove.resolve().relative_to(creating.interim_path.resolve())
- if not await aiofiles.os.path.isdir(path_to_remove):
- raise revision.FailedError(f"Path '{dir_to_delete_rel}' is not
a directory.")
- if await aiofiles.os.listdir(path_to_remove):
- raise revision.FailedError(f"Directory '{dir_to_delete_rel}'
is not empty.")
- # TODO: Move to the storage interface
- await aiofiles.os.rmdir(path_to_remove)
-
+ async with storage.write(session.uid) as write:
+ wacp = await write.as_project_committee_member(project_name)
+ created_error = await
wacp.release.delete_empty_directory(project_name, version_name,
dir_to_delete_rel)
except Exception:
log.exception(f"Unexpected error deleting directory
{dir_to_delete_rel} for {project_name}/{version_name}")
return await respond(500, "An unexpected error occurred.")
- if creating.failed is not None:
- return await respond(400, str(creating.failed))
+ if created_error is not None:
+ return await respond(400, created_error)
return await respond(200, f"Deleted empty directory
'{dir_to_delete_rel}'.")
diff --git a/atr/storage/writers/release.py b/atr/storage/writers/release.py
index 5c438ee..be0fb2f 100644
--- a/atr/storage/writers/release.py
+++ b/atr/storage/writers/release.py
@@ -92,6 +92,23 @@ class CommitteeParticipant(FoundationCommitter):
) as _creating:
yield _creating
+ async def delete_empty_directory(
+ self, project_name: str, version_name: str, dir_to_delete_rel:
pathlib.Path
+ ) -> str | None:
+ description = f"Delete empty directory {dir_to_delete_rel} via web
interface"
+ async with self.create_and_manage_revision(project_name, version_name,
description) as creating:
+ path_to_remove = creating.interim_path / dir_to_delete_rel
+
path_to_remove.resolve().relative_to(creating.interim_path.resolve())
+ if not await aiofiles.os.path.isdir(path_to_remove):
+ raise revision.FailedError(f"Path '{dir_to_delete_rel}' is not
a directory.")
+ if await aiofiles.os.listdir(path_to_remove):
+ raise revision.FailedError(f"Directory '{dir_to_delete_rel}'
is not empty.")
+ # TODO: Move to the storage interface
+ await aiofiles.os.rmdir(path_to_remove)
+ if creating.failed is not None:
+ return str(creating.failed)
+ return None
+
async def delete_file(self, project_name: str, version: str,
rel_path_to_delete: pathlib.Path) -> int:
metadata_files_deleted = 0
description = "File deletion through web interface"
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]