This is an automated email from the ASF dual-hosted git repository.
sbp pushed a commit to branch sbp
in repository https://gitbox.apache.org/repos/asf/tooling-trusted-releases.git
The following commit(s) were added to refs/heads/sbp by this push:
new af0824dc Remove the old revision creation code
af0824dc is described below
commit af0824dc6c2fcf5d9478d647a12b22e7c276fc14
Author: Sean B. Palmer <[email protected]>
AuthorDate: Wed Mar 4 14:52:19 2026 +0000
Remove the old revision creation code
---
atr/get/test.py | 8 ++-
atr/storage/writers/revision.py | 114 -------------------------------------
tests/unit/test_create_revision.py | 8 ++-
3 files changed, 11 insertions(+), 119 deletions(-)
diff --git a/atr/get/test.py b/atr/get/test.py
index 4022add6..b3dcd813 100644
--- a/atr/get/test.py
+++ b/atr/get/test.py
@@ -111,21 +111,25 @@ async def test_merge(
async with aiofiles.open(path_prior / "from_prior.txt",
"w") as f:
await f.write("prior content")
- await wacp_p.revision.create_revision(
+ result = await wacp_p.revision.create_revision_with_quarantine(
str(project_name),
str(version_name),
session.uid,
description="Test merge: prior revision",
modify=modify_prior,
)
+ if isinstance(result, sql.Quarantined):
+ raise RuntimeError("Unexpected quarantine in merge test")
- await wacp_n.revision.create_revision(
+ result = await wacp_n.revision.create_revision_with_quarantine(
str(project_name),
str(version_name),
session.uid,
description="Test merge: new revision",
modify=modify_new,
)
+ if isinstance(result, sql.Quarantined):
+ raise RuntimeError("Unexpected quarantine in merge test")
files: list[str] = []
async with db.session() as data:
diff --git a/atr/storage/writers/revision.py b/atr/storage/writers/revision.py
index 909a9bd2..e3bcde32 100644
--- a/atr/storage/writers/revision.py
+++ b/atr/storage/writers/revision.py
@@ -323,120 +323,6 @@ class CommitteeParticipant(FoundationCommitter):
self.__asf_uid = asf_uid
self.__committee_name = committee_name
- async def create_revision( # noqa: C901
- self,
- project_name: str,
- version_name: str,
- asf_uid: str,
- description: str | None = None,
- set_local_cache: bool = False,
- reset_to_global_cache: bool = False,
- modify: Callable[[pathlib.Path, sql.Revision | None], Awaitable[None]]
| None = None,
- clone_from: str | None = None,
- ) -> sql.Revision:
- """Create a new revision."""
- # Get the release
- release_name = sql.release_name(project_name, version_name)
- async with db.session() as data:
- release = await data.release(name=release_name,
_release_policy=True, _project_release_policy=True).demand(
- RuntimeError("Release does not exist for new revision
creation")
- )
- if clone_from is not None:
- old_revision = await data.revision(release_name=release_name,
number=clone_from).demand(
- RuntimeError(f"Revision {clone_from} does not exist")
- )
- else:
- old_revision = await interaction.latest_revision(release)
- if set_local_cache:
- release.check_cache_key = str(uuid.uuid4())
- if reset_to_global_cache:
- release.check_cache_key = None
-
- if clone_from is not None:
- old_release_dir = paths.release_directory_base(release) /
clone_from
- else:
- old_release_dir = paths.release_directory(release)
- merge_enabled = clone_from is None
-
- # Create a temporary directory
- # We ensure, below, that it's removed on any exception
- # Use the tmp subdirectory of state, to ensure that it is on the same
filesystem
- prefix_token = secrets.token_hex(16)
- temp_dir: str = await asyncio.to_thread(tempfile.mkdtemp,
prefix=prefix_token + "-", dir=paths.get_tmp_dir())
- temp_dir_path = pathlib.Path(temp_dir)
-
- try:
- # The directory was created by mkdtemp, but it's empty
- if old_revision is not None:
- # If this is not the first revision, hard link the previous
revision
- await util.create_hard_link_clone(old_release_dir,
temp_dir_path, do_not_create_dest_dir=True)
- # The directory is either empty or its files are hard linked to
the previous revision
- if modify is not None:
- await modify(temp_dir_path, old_revision)
- except types.FailedError:
- await aioshutil.rmtree(temp_dir)
- raise
- except Exception:
- await aioshutil.rmtree(temp_dir)
- raise
-
- validation_errors = await
asyncio.to_thread(detection.validate_directory, temp_dir_path)
- if validation_errors:
- await aioshutil.rmtree(temp_dir)
- raise types.FailedError("File validation failed:\n" +
"\n".join(validation_errors))
-
- # Ensure that the permissions of every directory are 755
- try:
- await asyncio.to_thread(util.chmod_directories, temp_dir_path)
- except Exception:
- await aioshutil.rmtree(temp_dir)
- raise
-
- # Make files read only to prevent them from being modified through
hard links
- try:
- await asyncio.to_thread(util.chmod_files, temp_dir_path, 0o444)
- except Exception:
- await aioshutil.rmtree(temp_dir)
- raise
-
- try:
- path_to_hash, path_to_size = await
attestable.paths_to_hashes_and_sizes(temp_dir_path)
- parent_revision_number = old_revision.number if old_revision else
None
- previous_attestable = None
- if parent_revision_number is not None:
- previous_attestable = await attestable.load(project_name,
version_name, parent_revision_number)
- base_inodes: dict[str, int] = {}
- base_hashes: dict[str, str] = {}
- if merge_enabled and (old_revision is not None):
- base_dir = old_release_dir
- base_inodes = await asyncio.to_thread(util.paths_to_inodes,
base_dir)
- base_hashes = dict(previous_attestable.paths) if
(previous_attestable is not None) else {}
- n_inodes = await asyncio.to_thread(util.paths_to_inodes,
temp_dir_path)
- except Exception:
- await aioshutil.rmtree(temp_dir)
- raise
-
- async with SafeSession(temp_dir) as data:
- return await finalise_revision(
- data,
- asf_uid=asf_uid,
- base_hashes=base_hashes,
- base_inodes=base_inodes,
- description=description,
- merge_enabled=merge_enabled,
- n_inodes=n_inodes,
- old_revision=old_revision,
- path_to_hash=path_to_hash,
- path_to_size=path_to_size,
- previous_attestable=previous_attestable,
- project_name=project_name,
- release=release,
- release_name=release_name,
- temp_dir=temp_dir,
- temp_dir_path=temp_dir_path,
- version_name=version_name,
- )
-
async def create_revision_with_quarantine( # noqa: C901
self,
project_name: str,
diff --git a/tests/unit/test_create_revision.py
b/tests/unit/test_create_revision.py
index 13f84a66..9b1ec01f 100644
--- a/tests/unit/test_create_revision.py
+++ b/tests/unit/test_create_revision.py
@@ -128,6 +128,7 @@ async def
test_clone_from_older_revision_skips_merge_without_intervening_change(
),
mock.patch.object(revision.attestable, "write_files_data",
new_callable=mock.AsyncMock),
mock.patch.object(revision.db, "session", return_value=mock_session),
+ mock.patch.object(revision.detection,
"detect_archives_requiring_quarantine", return_value=[]),
mock.patch.object(revision.detection, "validate_directory",
return_value=[]),
mock.patch.object(
revision.interaction, "latest_revision",
new_callable=mock.AsyncMock, return_value=latest_revision
@@ -146,7 +147,7 @@ async def
test_clone_from_older_revision_skips_merge_without_intervening_change(
mock.patch.object(revision.paths, "release_directory",
return_value=tmp_path / "releases" / "00006"),
mock.patch.object(revision.paths, "release_directory_base",
return_value=tmp_path / "releases"),
):
- await participant.create_revision("proj", "1.0", "test",
clone_from="00002")
+ await participant.create_revision_with_quarantine("proj", "1.0",
"test", clone_from="00002")
if merge_mock.called:
raise AssertionError(
@@ -213,6 +214,7 @@ async def
test_intervening_revision_triggers_merge_and_uses_latest_parent(tmp_pa
),
mock.patch.object(revision.attestable, "write_files_data",
new_callable=mock.AsyncMock),
mock.patch.object(revision.db, "session", return_value=mock_session),
+ mock.patch.object(revision.detection,
"detect_archives_requiring_quarantine", return_value=[]),
mock.patch.object(revision.detection, "validate_directory",
return_value=[]),
mock.patch.object(
revision.interaction,
@@ -232,7 +234,7 @@ async def
test_intervening_revision_triggers_merge_and_uses_latest_parent(tmp_pa
mock.patch.object(revision.paths, "release_directory",
return_value=tmp_path / "releases" / "00007"),
mock.patch.object(revision.paths, "release_directory_base",
return_value=tmp_path / "releases"),
):
- created_revision = await participant.create_revision("proj", "1.0",
"test")
+ created_revision = await
participant.create_revision_with_quarantine("proj", "1.0", "test")
assert isinstance(created_revision, FakeRevision)
assert merge_mock.await_count == 1
@@ -262,7 +264,7 @@ async def
test_modify_failed_error_propagates_and_cleans_up(tmp_path: pathlib.Pa
mock.patch.object(revision.paths, "get_tmp_dir",
return_value=tmp_path),
):
with pytest.raises(types.FailedError, match="Intentional error"):
- await participant.create_revision("proj", "1.0", "test",
modify=modify)
+ await participant.create_revision_with_quarantine("proj", "1.0",
"test", modify=modify)
assert isinstance(received_args["path"], pathlib.Path)
assert received_args["old_rev"] is None
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]