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]

Reply via email to