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 7016f9b Rename VotePolicy and associated interfaces to ReleasePolicy
7016f9b is described below
commit 7016f9b7ea1abf5d4dff6412791e3c96e497addf
Author: Sean B. Palmer <[email protected]>
AuthorDate: Sat May 3 09:11:54 2025 +0100
Rename VotePolicy and associated interfaces to ReleasePolicy
---
atr/blueprints/admin/admin.py | 2 +-
atr/construct.py | 28 +++----
atr/db/__init__.py | 92 +++++++++++-----------
atr/db/models.py | 18 ++---
atr/routes/projects.py | 68 ++++++++--------
atr/routes/voting.py | 8 +-
atr/templates/project-view.html | 12 +--
...ote-policy-add.html => release-policy-add.html} | 2 +-
...e-policy-edit.html => release-policy-edit.html} | 2 +-
...e-policy-form.html => release-policy-form.html} | 0
10 files changed, 116 insertions(+), 116 deletions(-)
diff --git a/atr/blueprints/admin/admin.py b/atr/blueprints/admin/admin.py
index a25c238..279fbb4 100644
--- a/atr/blueprints/admin/admin.py
+++ b/atr/blueprints/admin/admin.py
@@ -70,10 +70,10 @@ async def admin_data(model: str = "Committee") -> str:
"Project": data.project,
"PublicSigningKey": data.public_signing_key,
"Release": data.release,
+ "ReleasePolicy": data.release_policy,
"SSHKey": data.ssh_key,
"Task": data.task,
"TextValue": data.text_value,
- "VotePolicy": data.vote_policy,
}
if model not in model_methods:
diff --git a/atr/construct.py b/atr/construct.py
index 3f5dd66..58feee9 100644
--- a/atr/construct.py
+++ b/atr/construct.py
@@ -78,15 +78,15 @@ async def announce_release_body(body: str, options:
AnnounceReleaseOptions) -> s
async def announce_release_default(project_name: str) -> str:
async with db.session() as data:
- project = await data.project(name=project_name,
_vote_policy=True).demand(
+ project = await data.project(name=project_name,
_release_policy=True).demand(
RuntimeError(f"Project {project_name} not found")
)
- vote_policy = project.vote_policy
- if vote_policy is not None:
- # NOTE: Do not use "if vote_policy.announce_release_template is None"
+ release_policy = project.release_policy
+ if release_policy is not None:
+ # NOTE: Do not use "if release_policy.announce_release_template is
None"
# We want to check for the empty string too
- if vote_policy.announce_release_template:
- return vote_policy.announce_release_template
+ if release_policy.announce_release_template:
+ return release_policy.announce_release_template
return """\
The Apache [COMMITTEE] project team is pleased to announce the
@@ -127,9 +127,9 @@ async def start_vote_body(body: str, options:
StartVoteOptions) -> str:
checklist_content = ""
async with db.session() as data:
- vote_policy = await db.get_project_vote_policy(data,
options.project_name)
- if vote_policy:
- checklist_content = vote_policy.release_checklist or ""
+ release_policy = await db.get_project_release_policy(data,
options.project_name)
+ if release_policy:
+ checklist_content = release_policy.release_checklist or ""
# Perform substitutions in the body
# TODO: Handle the DURATION == 0 case
@@ -147,13 +147,13 @@ async def start_vote_body(body: str, options:
StartVoteOptions) -> str:
async def start_vote_default(project_name: str) -> str:
async with db.session() as data:
- vote_policy = await db.get_project_vote_policy(data, project_name)
+ release_policy = await db.get_project_release_policy(data,
project_name)
- if vote_policy is not None:
- # NOTE: Do not use "if vote_policy.announce_release_template is None"
+ if release_policy is not None:
+ # NOTE: Do not use "if release_policy.announce_release_template is
None"
# We want to check for the empty string too
- if vote_policy.start_vote_template:
- return vote_policy.start_vote_template
+ if release_policy.start_vote_template:
+ return release_policy.start_vote_template
return """Hello [COMMITTEE],
diff --git a/atr/db/__init__.py b/atr/db/__init__.py
index 4b1b0aa..56a12e3 100644
--- a/atr/db/__init__.py
+++ b/atr/db/__init__.py
@@ -229,12 +229,12 @@ class Session(sqlalchemy.ext.asyncio.AsyncSession):
full_name: Opt[str] = NOT_SET,
is_podling: Opt[bool] = NOT_SET,
committee_name: Opt[str] = NOT_SET,
- vote_policy_id: Opt[int] = NOT_SET,
+ release_policy_id: Opt[int] = NOT_SET,
_committee: bool = False,
_releases: bool = False,
_distribution_channels: bool = False,
_super_project: bool = False,
- _vote_policy: bool = False,
+ _release_policy: bool = False,
_committee_public_signing_keys: bool = False,
) -> Query[models.Project]:
query = sqlmodel.select(models.Project)
@@ -247,8 +247,8 @@ class Session(sqlalchemy.ext.asyncio.AsyncSession):
query = query.where(models.Project.is_podling == is_podling)
if is_defined(committee_name):
query = query.where(models.Project.committee_name ==
committee_name)
- if is_defined(vote_policy_id):
- query = query.where(models.Project.vote_policy_id ==
vote_policy_id)
+ if is_defined(release_policy_id):
+ query = query.where(models.Project.release_policy_id ==
release_policy_id)
if _committee:
query = query.options(select_in_load(models.Project.committee))
@@ -258,8 +258,8 @@ class Session(sqlalchemy.ext.asyncio.AsyncSession):
query =
query.options(select_in_load(models.Project.distribution_channels))
if _super_project:
query = query.options(select_in_load(models.Project.super_project))
- if _vote_policy:
- query = query.options(select_in_load(models.Project.vote_policy))
+ if _release_policy:
+ query =
query.options(select_in_load(models.Project.release_policy))
if _committee_public_signing_keys:
query =
query.options(select_in_load_nested(models.Project.committee,
models.Committee.public_signing_keys))
@@ -312,10 +312,10 @@ class Session(sqlalchemy.ext.asyncio.AsyncSession):
version: Opt[str] = NOT_SET,
revision: Opt[str] = NOT_SET,
sboms: Opt[list[str]] = NOT_SET,
- vote_policy_id: Opt[int] = NOT_SET,
+ release_policy_id: Opt[int] = NOT_SET,
votes: Opt[list[models.VoteEntry]] = NOT_SET,
_project: bool = False,
- _vote_policy: bool = False,
+ _release_policy: bool = False,
_committee: bool = False,
_tasks: bool = False,
) -> Query[models.Release]:
@@ -339,15 +339,15 @@ class Session(sqlalchemy.ext.asyncio.AsyncSession):
query = query.where(models.Release.revision == revision)
if is_defined(sboms):
query = query.where(models.Release.sboms == sboms)
- if is_defined(vote_policy_id):
- query = query.where(models.Release.vote_policy_id ==
vote_policy_id)
+ if is_defined(release_policy_id):
+ query = query.where(models.Release.release_policy_id ==
release_policy_id)
if is_defined(votes):
query = query.where(models.Release.votes == votes)
if _project:
query = query.options(select_in_load(models.Release.project))
- if _vote_policy:
- query = query.options(select_in_load(models.Release.vote_policy))
+ if _release_policy:
+ query =
query.options(select_in_load(models.Release.release_policy))
if _committee:
query =
query.options(select_in_load_nested(models.Release.project,
models.Project.committee))
if _tasks:
@@ -355,6 +355,36 @@ class Session(sqlalchemy.ext.asyncio.AsyncSession):
return Query(self, query)
+ def release_policy(
+ self,
+ id: Opt[int] = NOT_SET,
+ mailto_addresses: Opt[list[str]] = NOT_SET,
+ manual_vote: Opt[bool] = NOT_SET,
+ min_hours: Opt[int] = NOT_SET,
+ release_checklist: Opt[str] = NOT_SET,
+ pause_for_rm: Opt[bool] = NOT_SET,
+ _project: bool = False,
+ ) -> Query[models.ReleasePolicy]:
+ query = sqlmodel.select(models.ReleasePolicy)
+
+ if is_defined(id):
+ query = query.where(models.ReleasePolicy.id == id)
+ if is_defined(mailto_addresses):
+ query = query.where(models.ReleasePolicy.mailto_addresses ==
mailto_addresses)
+ if is_defined(manual_vote):
+ query = query.where(models.ReleasePolicy.manual_vote ==
manual_vote)
+ if is_defined(min_hours):
+ query = query.where(models.ReleasePolicy.min_hours == min_hours)
+ if is_defined(release_checklist):
+ query = query.where(models.ReleasePolicy.release_checklist ==
release_checklist)
+ if is_defined(pause_for_rm):
+ query = query.where(models.ReleasePolicy.pause_for_rm ==
pause_for_rm)
+
+ if _project:
+ query = query.options(select_in_load(models.ReleasePolicy.project))
+
+ return Query(self, query)
+
def ssh_key(
self,
fingerprint: Opt[str] = NOT_SET,
@@ -417,36 +447,6 @@ class Session(sqlalchemy.ext.asyncio.AsyncSession):
return Query(self, query)
- def vote_policy(
- self,
- id: Opt[int] = NOT_SET,
- mailto_addresses: Opt[list[str]] = NOT_SET,
- manual_vote: Opt[bool] = NOT_SET,
- min_hours: Opt[int] = NOT_SET,
- release_checklist: Opt[str] = NOT_SET,
- pause_for_rm: Opt[bool] = NOT_SET,
- _project: bool = False,
- ) -> Query[models.VotePolicy]:
- query = sqlmodel.select(models.VotePolicy)
-
- if is_defined(id):
- query = query.where(models.VotePolicy.id == id)
- if is_defined(mailto_addresses):
- query = query.where(models.VotePolicy.mailto_addresses ==
mailto_addresses)
- if is_defined(manual_vote):
- query = query.where(models.VotePolicy.manual_vote == manual_vote)
- if is_defined(min_hours):
- query = query.where(models.VotePolicy.min_hours == min_hours)
- if is_defined(release_checklist):
- query = query.where(models.VotePolicy.release_checklist ==
release_checklist)
- if is_defined(pause_for_rm):
- query = query.where(models.VotePolicy.pause_for_rm == pause_for_rm)
-
- if _project:
- query = query.options(select_in_load(models.VotePolicy.project))
-
- return Query(self, query)
-
def text_value(
self,
ns: Opt[str] = NOT_SET,
@@ -488,12 +488,12 @@ async def create_async_engine(app_config:
type[config.AppConfig]) -> sqlalchemy.
return engine
-async def get_project_vote_policy(data: Session, project_name: str) ->
models.VotePolicy | None:
- """Fetch the VotePolicy for a project."""
- project = await data.project(name=project_name, _vote_policy=True).demand(
+async def get_project_release_policy(data: Session, project_name: str) ->
models.ReleasePolicy | None:
+ """Fetch the ReleasePolicy for a project."""
+ project = await data.project(name=project_name,
_release_policy=True).demand(
RuntimeError(f"Project {project_name} not found")
)
- return project.vote_policy
+ return project.release_policy
def init_database(app: base.QuartApp) -> None:
diff --git a/atr/db/models.py b/atr/db/models.py
index 66791cd..cee049d 100644
--- a/atr/db/models.py
+++ b/atr/db/models.py
@@ -100,7 +100,7 @@ class PublicSigningKey(sqlmodel.SQLModel, table=True):
committees: list["Committee"] =
sqlmodel.Relationship(back_populates="public_signing_keys", link_model=KeyLink)
-class VotePolicy(sqlmodel.SQLModel, table=True):
+class ReleasePolicy(sqlmodel.SQLModel, table=True):
id: int = sqlmodel.Field(default=None, primary_key=True)
mailto_addresses: list[str] = sqlmodel.Field(default_factory=list,
sa_column=sqlalchemy.Column(sqlalchemy.JSON))
manual_vote: bool = sqlmodel.Field(default=False)
@@ -110,8 +110,8 @@ class VotePolicy(sqlmodel.SQLModel, table=True):
start_vote_template: str = sqlmodel.Field(default="")
announce_release_template: str = sqlmodel.Field(default="")
- # One-to-One: A vote policy is associated with a project
- project: "Project" = sqlmodel.Relationship(back_populates="vote_policy")
+ # One-to-One: A release policy is associated with a project
+ project: "Project" = sqlmodel.Relationship(back_populates="release_policy")
class Committee(sqlmodel.SQLModel, table=True):
@@ -177,9 +177,9 @@ class Project(sqlmodel.SQLModel, table=True):
# One-to-many: A project can have multiple distribution channels, each
channel belongs to one project
distribution_channels: list["DistributionChannel"] =
sqlmodel.Relationship(back_populates="project")
- # Many-to-one: A Project can have one vote policy, a vote policy can be
used by multiple entities
- vote_policy_id: int | None = sqlmodel.Field(default=None,
foreign_key="votepolicy.id", ondelete="CASCADE")
- vote_policy: VotePolicy | None = sqlmodel.Relationship(
+ # Many-to-one: A Project can have one release policy, a release policy can
be used by multiple entities
+ release_policy_id: int | None = sqlmodel.Field(default=None,
foreign_key="releasepolicy.id", ondelete="CASCADE")
+ release_policy: ReleasePolicy | None = sqlmodel.Relationship(
cascade_delete=True, sa_relationship_kwargs={"cascade": "all,
delete-orphan", "single_parent": True}
)
@@ -398,9 +398,9 @@ class Release(sqlmodel.SQLModel, table=True):
revision: str | None = sqlmodel.Field(default=None, index=True)
sboms: list[str] = sqlmodel.Field(default_factory=list,
sa_column=sqlalchemy.Column(sqlalchemy.JSON))
- # Many-to-one: A release can have one vote policy, a vote policy can be
used by multiple releases
- vote_policy_id: int | None = sqlmodel.Field(default=None,
foreign_key="votepolicy.id")
- vote_policy: VotePolicy | None = sqlmodel.Relationship(
+ # Many-to-one: A release can have one release policy, a release policy can
be used by multiple releases
+ release_policy_id: int | None = sqlmodel.Field(default=None,
foreign_key="releasepolicy.id")
+ release_policy: ReleasePolicy | None = sqlmodel.Relationship(
cascade_delete=True, sa_relationship_kwargs={"cascade": "all,
delete-orphan", "single_parent": True}
)
diff --git a/atr/routes/projects.py b/atr/routes/projects.py
index 171c934..b3e79a9 100644
--- a/atr/routes/projects.py
+++ b/atr/routes/projects.py
@@ -40,9 +40,9 @@ class AddFormProtocol(Protocol):
submit: wtforms.SubmitField
-class VotePolicyForm(util.QuartFormTyped):
+class ReleasePolicyForm(util.QuartFormTyped):
"""
- A Form to create or edit a VotePolicy.
+ A Form to create or edit a ReleasePolicy.
TODO: Currently only a single mailto_address is supported.
see:
https://stackoverflow.com/questions/49066046/append-entry-to-fieldlist-with-flask-wtforms-using-ajax
@@ -178,7 +178,7 @@ async def select(session: routes.CommitterSession) -> str:
@routes.public("/projects/<name>")
async def view(name: str) -> str:
async with db.session() as data:
- project = await data.project(name=name,
_committee_public_signing_keys=True, _vote_policy=True).demand(
+ project = await data.project(name=name,
_committee_public_signing_keys=True, _release_policy=True).demand(
http.client.HTTPException(404)
)
return await quart.render_template(
@@ -194,70 +194,70 @@ async def view(name: str) -> str:
)
[email protected]("/projects/<project_name>/vote-policy/add", methods=["GET",
"POST"])
-async def vote_policy_add(session: routes.CommitterSession, project_name: str)
-> response.Response | str:
[email protected]("/projects/<project_name>/release-policy/add",
methods=["GET", "POST"])
+async def release_policy_add(session: routes.CommitterSession, project_name:
str) -> response.Response | str:
await session.check_access(project_name)
uid = await util.get_asf_id_or_die()
async with db.session() as data:
- project = await data.project(name=project_name, _committee=True,
_vote_policy=True).demand(
+ project = await data.project(name=project_name, _committee=True,
_release_policy=True).demand(
base.ASFQuartException(f"Project {project_name} not found",
errorcode=404)
)
if not (user.is_committee_member(project.committee, uid) or
user.is_admin(uid)):
raise base.ASFQuartException(
- f"You must be a committee member of {project.display_name} to
submit a voting policy", errorcode=403
+ f"You must be a committee member of {project.display_name} to
submit a release policy", errorcode=403
)
- form = await VotePolicyForm.create_form(data={"project_name":
project.name})
+ form = await ReleasePolicyForm.create_form(data={"project_name":
project.name})
if form.mailto_addresses.entries[0].data is None:
form.mailto_addresses.entries[0].data =
f"dev@{util.unwrap(project.committee).name}.apache.org"
if await form.validate_on_submit():
- return await _add_voting_policy(project, form, data)
+ return await _add_release_policy(project, form, data)
return await quart.render_template(
- "vote-policy-add.html",
+ "release-policy-add.html",
asf_id=uid,
project=project,
form=form,
)
[email protected]("/projects/<project_name>/vote-policy/edit", methods=["GET",
"POST"])
-async def vote_policy_edit(session: routes.CommitterSession, project_name:
str) -> response.Response | str:
[email protected]("/projects/<project_name>/release-policy/edit",
methods=["GET", "POST"])
+async def release_policy_edit(session: routes.CommitterSession, project_name:
str) -> response.Response | str:
await session.check_access(project_name)
uid = await util.get_asf_id_or_die()
async with db.session() as data:
- project = await data.project(name=project_name, _committee=True,
_vote_policy=True).demand(
+ project = await data.project(name=project_name, _committee=True,
_release_policy=True).demand(
base.ASFQuartException(f"Project {project_name} not found",
errorcode=404)
)
- if project.vote_policy is None:
- base.ASFQuartException(f"Vote Policy for project {project_name}
does not exist", errorcode=404)
+ if project.release_policy is None:
+ base.ASFQuartException(f"Release Policy for project {project_name}
does not exist", errorcode=404)
if not (user.is_committee_member(project.committee, uid) or
user.is_admin(uid)):
raise base.ASFQuartException(
- f"You must be a committee member of {project.display_name} to
submit a voting policy", errorcode=403
+ f"You must be a committee member of {project.display_name} to
submit a release policy", errorcode=403
)
- form = await VotePolicyForm.create_form()
+ form = await ReleasePolicyForm.create_form()
# fill data
if quart.request.method == "GET":
- form.process(obj=project.vote_policy)
+ form.process(obj=project.release_policy)
form.project_name.data = project.name
if await form.validate_on_submit():
- return await _edit_voting_policy(util.unwrap(project.vote_policy),
form, data)
+ return await
_edit_release_policy(util.unwrap(project.release_policy), form, data)
# For GET requests, show the form
return await quart.render_template(
- "vote-policy-edit.html",
+ "release-policy-edit.html",
asf_id=uid,
project=project,
form=form,
@@ -324,7 +324,7 @@ async def _add_project(form: AddFormProtocol, asf_id: str)
-> response.Response:
category=base_project.category,
programming_languages=base_project.programming_languages,
committee_name=base_project.committee_name,
- vote_policy_id=base_project.vote_policy_id,
+ release_policy_id=base_project.release_policy_id,
created=datetime.datetime.now(datetime.UTC),
created_by=asf_id,
)
@@ -335,10 +335,10 @@ async def _add_project(form: AddFormProtocol, asf_id:
str) -> response.Response:
return quart.redirect(util.as_url(view, name=new_project_label))
-async def _add_voting_policy(project: models.Project, form: VotePolicyForm,
data: db.Session) -> response.Response:
+async def _add_release_policy(project: models.Project, form:
ReleasePolicyForm, data: db.Session) -> response.Response:
project_name = str(form.project_name.data)
- vote_policy = models.VotePolicy(
+ release_policy = models.ReleasePolicy(
mailto_addresses=[util.unwrap(form.mailto_addresses.entries[0].data)],
manual_vote=form.manual_vote.data,
min_hours=util.unwrap(form.min_hours.data),
@@ -348,25 +348,25 @@ async def _add_voting_policy(project: models.Project,
form: VotePolicyForm, data
pause_for_rm=form.pause_for_rm.data,
)
- vote_policy.project = project
- data.add(vote_policy)
+ release_policy.project = project
+ data.add(release_policy)
await data.commit()
return quart.redirect(util.as_url(view, name=project_name))
-async def _edit_voting_policy(
- vote_policy: models.VotePolicy, form: VotePolicyForm, data: db.Session
+async def _edit_release_policy(
+ release_policy: models.ReleasePolicy, form: ReleasePolicyForm, data:
db.Session
) -> response.Response:
project_name = str(form.project_name.data)
- vote_policy.mailto_addresses =
[util.unwrap(form.mailto_addresses.entries[0].data)]
- vote_policy.manual_vote = form.manual_vote.data
- vote_policy.min_hours = util.unwrap(form.min_hours.data)
- vote_policy.release_checklist = util.unwrap(form.release_checklist.data)
- vote_policy.start_vote_template =
util.unwrap(form.start_vote_template.data)
- vote_policy.announce_release_template =
util.unwrap(form.announce_release_template.data)
- vote_policy.pause_for_rm = form.pause_for_rm.data
+ release_policy.mailto_addresses =
[util.unwrap(form.mailto_addresses.entries[0].data)]
+ release_policy.manual_vote = form.manual_vote.data
+ release_policy.min_hours = util.unwrap(form.min_hours.data)
+ release_policy.release_checklist = util.unwrap(form.release_checklist.data)
+ release_policy.start_vote_template =
util.unwrap(form.start_vote_template.data)
+ release_policy.announce_release_template =
util.unwrap(form.announce_release_template.data)
+ release_policy.pause_for_rm = form.pause_for_rm.data
await data.commit()
return quart.redirect(util.as_url(view, name=project_name))
diff --git a/atr/routes/voting.py b/atr/routes/voting.py
index b9a27f9..5d2526e 100644
--- a/atr/routes/voting.py
+++ b/atr/routes/voting.py
@@ -56,8 +56,8 @@ async def selected_revision(
committee = util.unwrap(release.committee)
permitted_recipients = util.permitted_recipients(session.uid)
- if release.vote_policy:
- min_hours = release.vote_policy.min_hours
+ if release.release_policy:
+ min_hours = release.release_policy.min_hours
else:
min_hours = 72
@@ -126,9 +126,9 @@ async def selected_revision(
# TODO: We also need to store the duration of the vote
# We can't allow resolution of the vote until the duration has
elapsed
# But we allow the user to specify in the form
- # And yet we also have VotePolicy.min_hours
+ # And yet we also have ReleasePolicy.min_hours
# Presumably this sets the default, and the form takes precedence?
- # VotePolicy.min_hours can also be 0, though
+ # ReleasePolicy.min_hours can also be 0, though
# Create a task for vote initiation
task = models.Task(
diff --git a/atr/templates/project-view.html b/atr/templates/project-view.html
index c68286b..8a53a1f 100644
--- a/atr/templates/project-view.html
+++ b/atr/templates/project-view.html
@@ -117,24 +117,24 @@
<div class="card mb-4">
<div class="card-header bg-light d-flex justify-content-between
align-items-center">
- <h3 class="mb-0">Voting policy</h3>
+ <h3 class="mb-0">Release policy</h3>
{% if not project.is_retired %}
- {% if project.vote_policy and (is_committee_member or is_admin) %}
+ {% if project.release_policy and (is_committee_member or is_admin) %}
<div>
<a class="btn btn-primary btn-sm"
- href="{{ as_url(routes.projects.vote_policy_edit,
project_name=project.name) }}"><i class="bi bi-pencil-square"></i></a>
+ href="{{ as_url(routes.projects.release_policy_edit,
project_name=project.name) }}"><i class="bi bi-pencil-square"></i></a>
</div>
{% elif (is_committee_member or is_admin) %}
<div>
<a class="btn btn-primary btn-sm"
- href="{{ as_url(routes.projects.vote_policy_add,
project_name=project.name) }}"><i class="bi bi-plus"></i></a>
+ href="{{ as_url(routes.projects.release_policy_add,
project_name=project.name) }}"><i class="bi bi-plus"></i></a>
</div>
{% endif %}
{% endif %}
</div>
<div class="card-body">
- {% if project.vote_policy %}
- {% set vp = project.vote_policy %}
+ {% if project.release_policy %}
+ {% set rp = project.release_policy %}
<div class="card h-100 border">
<div class="card-body">
<table class="table mb-0">
diff --git a/atr/templates/vote-policy-add.html
b/atr/templates/release-policy-add.html
similarity index 92%
rename from atr/templates/vote-policy-add.html
rename to atr/templates/release-policy-add.html
index 5a767cd..e115fd7 100644
--- a/atr/templates/vote-policy-add.html
+++ b/atr/templates/release-policy-add.html
@@ -18,6 +18,6 @@
Use this form to create a voting policy for <strong>{{
project.display_name }}</strong>.
</p>
- {% include "vote-policy-form.html" %}
+ {% include "release-policy-form.html" %}
{% endblock content %}
diff --git a/atr/templates/vote-policy-edit.html
b/atr/templates/release-policy-edit.html
similarity index 92%
rename from atr/templates/vote-policy-edit.html
rename to atr/templates/release-policy-edit.html
index 678873d..eea1761 100644
--- a/atr/templates/vote-policy-edit.html
+++ b/atr/templates/release-policy-edit.html
@@ -19,6 +19,6 @@
Use this form to edit the voting policy for <strong>{{
project.display_name }}</strong>.
</p>
- {% include "vote-policy-form.html" %}
+ {% include "release-policy-form.html" %}
{% endblock content %}
diff --git a/atr/templates/vote-policy-form.html
b/atr/templates/release-policy-form.html
similarity index 100%
rename from atr/templates/vote-policy-form.html
rename to atr/templates/release-policy-form.html
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]