Remove expensive call in build badge
We don't need to list all the tags to determine if any exist, and showing the repo is ready when it is empty is probably correct behavior anyway
This commit is contained in:
parent
f0dd2e348b
commit
a949a44cb2
3 changed files with 20 additions and 5 deletions
|
@ -616,3 +616,14 @@ def list_popular_public_repos(action_count_threshold, time_span, repo_kind='imag
|
|||
.group_by(RepositoryActionCount.repository, Repository.name, Namespace.username)
|
||||
.having(fn.Sum(RepositoryActionCount.count) >= action_count_threshold)
|
||||
.tuples())
|
||||
|
||||
|
||||
def is_empty(namespace_name, repository_name):
|
||||
""" Returns if the repository referenced by the given namespace and name is empty. If the repo
|
||||
doesn't exist, returns True.
|
||||
"""
|
||||
try:
|
||||
tag.list_repository_tags(namespace_name, repository_name).limit(1).get()
|
||||
return False
|
||||
except RepositoryTag.DoesNotExist:
|
||||
return True
|
||||
|
|
|
@ -2,7 +2,7 @@ import pytest
|
|||
|
||||
from peewee import IntegrityError
|
||||
|
||||
from data.model.repository import create_repository, purge_repository
|
||||
from data.model.repository import create_repository, purge_repository, is_empty
|
||||
from test.fixtures import *
|
||||
|
||||
def test_duplicate_repository_different_kinds(initialized_db):
|
||||
|
@ -12,3 +12,10 @@ def test_duplicate_repository_different_kinds(initialized_db):
|
|||
# Try to create an app repo with the same name, which should fail.
|
||||
with pytest.raises(IntegrityError):
|
||||
create_repository('devtable', 'somenewrepo', None, repo_kind='application')
|
||||
|
||||
|
||||
def test_is_empty(initialized_db):
|
||||
create_repository('devtable', 'somenewrepo', None, repo_kind='image')
|
||||
|
||||
assert is_empty('devtable', 'somenewrepo')
|
||||
assert not is_empty('devtable', 'simple')
|
||||
|
|
|
@ -479,11 +479,8 @@ def build_status_badge(namespace_name, repo_name):
|
|||
if not repo or token != repo.badge_token:
|
||||
abort(404)
|
||||
|
||||
# Lookup the tags for the repository.
|
||||
tags = model.tag.list_repository_tags(namespace_name, repo_name)
|
||||
is_empty = len(list(tags)) == 0
|
||||
is_empty = model.repository.is_empty(namespace_name, repo_name)
|
||||
recent_build = model.build.get_recent_repository_build(namespace_name, repo_name)
|
||||
|
||||
if not is_empty and (not recent_build or recent_build.phase == 'complete'):
|
||||
status_name = 'ready'
|
||||
elif recent_build and recent_build.phase == 'error':
|
||||
|
|
Reference in a new issue