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 681dcf1 Disallow copying draft revisions as preview revisions
681dcf1 is described below
commit 681dcf11d6f7c2927373b7a0348beaafeda4ec0e
Author: Sean B. Palmer <[email protected]>
AuthorDate: Thu May 15 19:26:33 2025 +0100
Disallow copying draft revisions as preview revisions
---
atr/db/models.py | 6 +++---
atr/revision.py | 2 +-
atr/routes/revisions.py | 12 +++++++++++-
atr/templates/revisions-selected.html | 6 +++++-
4 files changed, 20 insertions(+), 6 deletions(-)
diff --git a/atr/db/models.py b/atr/db/models.py
index c849d35..7feb2ce 100644
--- a/atr/db/models.py
+++ b/atr/db/models.py
@@ -306,8 +306,8 @@ class ReleasePhase(str, enum.Enum):
RELEASE = "release"
-def revision_name(release_name: str, seq: int) -> str:
- return f"{release_name} {seq}"
+def revision_name(release_name: str, number: str) -> str:
+ return f"{release_name} {number}"
class Revision(sqlmodel.SQLModel, table=True):
@@ -381,7 +381,7 @@ def populate_revision_sequence_and_name(
# Do NOT set revision.parent directly here
# Recalculate the Revision.name
- revision.name = revision_name(revision.release_name, revision.seq)
+ revision.name = revision_name(revision.release_name, revision.number)
class TaskStatus(str, enum.Enum):
diff --git a/atr/revision.py b/atr/revision.py
index 539243a..374051b 100644
--- a/atr/revision.py
+++ b/atr/revision.py
@@ -58,7 +58,7 @@ async def create_and_manage(
# number is automatically computed in an event listener
asfuid=asf_uid,
created=datetime.datetime.now(datetime.UTC),
- phase=models.ReleasePhase.RELEASE_CANDIDATE_DRAFT,
+ phase=release_one.phase,
# parent_name is automatically computed in an event listener
# parent is automatically computed in an event listener
child=None,
diff --git a/atr/routes/revisions.py b/atr/routes/revisions.py
index 2d023a9..a8926b3 100644
--- a/atr/routes/revisions.py
+++ b/atr/routes/revisions.py
@@ -28,10 +28,10 @@ import werkzeug.wrappers.response as response
import atr.db as db
import atr.db.models as models
+import atr.revision as revision
import atr.routes as routes
import atr.schema as schema
import atr.util as util
-from atr import revision
@routes.committer("/revisions/<project_name>/<version_name>")
@@ -105,6 +105,16 @@ async def selected_post(session: routes.CommitterSession,
project_name: str, ver
if release.phase not in {models.ReleasePhase.RELEASE_CANDIDATE_DRAFT,
models.ReleasePhase.RELEASE_PREVIEW}:
raise base.ASFQuartException("Cannot set revision for non-draft or
preview release", errorcode=400)
+ selected_revision = await data.revision(release_name=release.name,
number=selected_revision_number).demand(
+ base.ASFQuartException(f"Revision {selected_revision_number} not
found", errorcode=404)
+ )
+ if (release.phase == models.ReleasePhase.RELEASE_PREVIEW) and (
+ selected_revision.phase != models.ReleasePhase.RELEASE_PREVIEW
+ ):
+ raise base.ASFQuartException(
+ f"Revision {selected_revision_number} is not a preview
revision", errorcode=400
+ )
+
async with revision.create_and_manage(project_name, version_name,
session.uid) as (
new_revision_dir,
new_revision_number,
diff --git a/atr/templates/revisions-selected.html
b/atr/templates/revisions-selected.html
index bb2a5dc..3be8dc9 100644
--- a/atr/templates/revisions-selected.html
+++ b/atr/templates/revisions-selected.html
@@ -48,6 +48,8 @@
<h2 class="fs-6 my-2 mx-0 p-0 border-0 atr-sans">
<a href="#{{ revision.number }}"
class="fw-bold text-decoration-none text-body">{{
revision.number }}</a>
+ {% set revision_phase_key =
revision.phase.value.lower().split("_")[-1] %}
+ <span class="badge bg-secondary ms-2">{{
revision_phase_key.upper() }}</span>
{% if revision.number == latest_revision_number %}<span
class="badge bg-primary ms-2">Current</span>{% endif %}
</h2>
<span class="fs-6 text-muted">
@@ -105,7 +107,9 @@
{% endif %}
{% endif %}
- {% if revision.number != latest_revision_number %}
+ {% set is_draft = phase_key == "draft" %}
+ {% set revision_is_preview = revision.phase.value.lower() ==
"release_preview" %}
+ {% if (revision.number != latest_revision_number) and (is_draft or
revision_is_preview) %}
<h3 class="fs-6 fw-semibold mt-3 atr-sans">Actions</h3>
<div class="mt-3">
<form method="post"
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]