From: Michael Tremer Date: Wed, 22 Jan 2025 17:03:07 +0000 (+0000) Subject: repos: Fix creating custom repositories X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=234d9aa08baf46724bb0f26c1b57a9384e13acea;p=pbs.git repos: Fix creating custom repositories Signed-off-by: Michael Tremer --- diff --git a/src/buildservice/repos.py b/src/buildservice/repos.py index d2caca29..5276922e 100644 --- a/src/buildservice/repos.py +++ b/src/buildservice/repos.py @@ -124,7 +124,7 @@ class Repos(base.Object): Creates a new repository """ # Generate a slug - slug = await self._make_slug(name, owner=owner) + slug = await self._make_slug(distro, name, owner=owner) # Generate a comment for the key comment = "%s - %s" % (distro, name) @@ -132,48 +132,50 @@ class Repos(base.Object): comment = "%s - %s" % (owner, comment) # Create a key for this repository - key = await self.backend.keys.create(comment=comment, user=owner) - - repo = await self._get_repository(""" - INSERT INTO - repositories - ( - distro_id, - owner_id, - name, - slug, - key_id - ) - VALUES ( - %s, %s, %s, %s, %s - ) - RETURNING *""", - distro, - owner, - name, - slug, - key, - - # Populate the cache - key=key, owner=owner, + key = await self.backend.keys.create( + comment = comment, + user = owner, + ) + + # Create the repository + repo = await self.db.insert( + Repo, + distro = distro, + owner = owner, + name = name, + slug = slug, + key = key, ) return repo - async def _make_slug(self, name, owner=None): + async def _make_slug(self, distro, name, owner=None): for i in misc.infinity(): slug = misc.normalize(name, iteration=i) - exists = await self.db.get("SELECT 1 FROM repositories \ - WHERE deleted_at IS NULL AND owner_id = %s AND slug = %s", owner, slug) - if not exists: - return slug + stmt = ( + sqlalchemy + .select( + Repo + ) + .where( + Repo.deleted_at == None, + Repo.distro == distro, + Repo.slug == slug, + ) + ) + + # If a repository with this slug exists, we need to try again + if await self.db.select_one(stmt): + continue + + return slug async def write(self): """ Write/re-write all repositories """ - for repo in self: + async for repo in self: await repo.write() diff --git a/src/templates/repos/create-custom.html b/src/templates/repos/create-custom.html index d6a16609..1766ee5e 100644 --- a/src/templates/repos/create-custom.html +++ b/src/templates/repos/create-custom.html @@ -1,10 +1,11 @@ -{% extends "../base.html" %} +{% extends "modal.html" %} -{% block title %}{{ _("Repositories") }} - {{ _("Create") }}{% end block %} -{% block container %} -