# Move the new repository data to its destination
await self.backend.move(t, path)
- # Delete
+ # Clear!
- async def delete(self, user=None):
+ async def clear(self, removed_by=None):
+ """
+ Removes all builds from this repository
+ """
+ stmt = (
+ sqlalchemy
+ .update(
+ RepoBuild,
+ )
+ .where(
+ RepoBuild.removed_at == None,
+ RepoBuild.repo == self,
+ )
+ .values(
+ removed_at = sqlalchemy.func.current_timestamp(),
+ removed_by_id = removed_by.id if removed_by else None,
+ )
+ )
+
+ # Run the query
+ await self.db.execute(stmt)
+
+ # Delete!
+
+ async def delete(self, deleted_by=None):
"""
Deletes this repository
"""
# Mark as deleted
- await self._set_attribute_now("deleted_at")
- if user:
- await self._set_attribute("deleted_by", user)
+ await super().delete(deleted_by)
# Delete the key
if self.key:
await self.key.delete()
# Remove all builds from this repository
- await self.db.execute("""
- UPDATE
- repository_builds
- SET
- removed_at = CURRENT_TIMESTAMP,
- removed_by = %s
- WHERE
- repo_id = %s
- AND
- removed_at IS NULL
- """, user, self.id,
- )
+ await self.clear(deleted_by)
# Local path
path = self.local_path()
-{% extends "../modal.html" %}
+{% extends "modal.html" %}
-{% block title %}{{ _("Delete Repository") }} - {{ repo }}{% end block %}
+{% block title %}{{ _("Delete Repository") }} - {{ repo }}{% endblock %}
{% block breadcrumbs %}
<nav class="breadcrumb" aria-label="breadcrumbs">
<li>
<a href="/distros/{{ repo.distro.slug }}">{{ repo.distro }}</a>
</li>
- {% end %}
+ {% endif %}
<li>
<a href="#" disabled>{{ _("Repositories") }}</a>
</li>
</li>
</ul>
</nav>
-{% end block %}
+{% endblock %}
{% block modal_title %}
<h4 class="title is-4">{{ _("Delete Repository") }}</h4>
<h6 class="subtitle is-6">{{ repo }}</h6>
-{% end block %}
+{% endblock %}
{% block modal %}
<form method="POST" action="">
- {% raw xsrf_form_html() %}
+ {{ xsrf_form_html() | safe }}
<div class="content">
<p>
</button>
</div>
</form>
-{% end block %}
+{% endblock %}
class DeleteHandler(BaseHandler):
@base.authenticated
- def get(self, **kwargs):
+ async def get(self, **kwargs):
# Fetch the repository
- repo = self._get_repo(**kwargs)
+ repo = await self._get_repo(**kwargs)
# Check for permissions
if not repo.has_perm(self.current_user):
raise tornado.web.HTTPError(403)
- self.render("repos/delete.html", repo=repo)
+ await self.render("repos/delete.html", repo=repo)
@base.authenticated
async def post(self, **kwargs):
# Fetch the repository
- repo = self._get_repo(**kwargs)
+ repo = await self._get_repo(**kwargs)
# Check for permissions
if not repo.has_perm(self.current_user):
raise tornado.web.HTTPError(403)
- with self.db.transaction():
- await repo.delete(user=self.current_user)
+ async with await self.db.transaction():
+ await repo.delete(deleted_by=self.current_user)
if repo.owner:
self.redirect("/users/%s" % repo.owner.name)