return [Build(self.backend, b.id, b) for b in self.db.query(query, *args)]
def get_latest_by_name(self, name):
- return self._get_build("SELECT builds.* FROM builds \
- LEFT JOIN packages ON builds.pkg_id = packages.id \
- WHERE packages.name = %s ORDER BY builds.time_created DESC \
- LIMIT 1", name)
-
- def get_active_builds(self, name):
"""
- Returns a list of all builds that are in a repository
- and the successors of the latest builds.
+ Returns the latest build that matches the package name
"""
- builds = []
-
- for distro in self.backend.distros:
- for repo in distro.repositories:
- builds += repo.get_builds_by_name(name)
-
- if builds:
- # The latest build should be at the end of the list
- latest_build = builds[-1]
-
- # We will add all successors that are not broken
- builds += (b for b in latest_build.successors
- if not b.is_broken() and not b in builds)
-
- # Order from newest to oldest
- builds.reverse()
-
- return builds
+ return self._get_build("""
+ SELECT
+ builds.*
+ FROM
+ builds
+ LEFT JOIN
+ packages ON builds.pkg_id = packages.id
+ WHERE
+ packages.name = %s
+ ORDER BY
+ builds.time_created DESC
+ LIMIT 1""",
+ name,
+ )
def get_obsolete(self, repo=None):
"""
return self._update
- @lazy_property
- def successors(self):
- builds = self.backend.builds._get_builds("SELECT builds.* FROM builds \
- LEFT JOIN packages ON builds.pkg_id = packages.id \
- WHERE packages.name = %s AND builds.type = %s AND \
- builds.time_created >= %s", self.pkg.name, "release", self.created)
-
- return sorted(builds)
-
@lazy_property
def repo(self):
res = self.db.get("SELECT repo_id FROM repositories_builds \
{% extends "base.html" %}
-{% block title %}{{ _("Package") }} - {{ pkg.name }}{% end block %}
+{% block title %}{{ _("Package") }} - {{ package.name }}{% end block %}
{% block container %}
<nav aria-label="{{ _("You are here:") }}" role="navigation">
</h2>
<div class="callout">
- {% module Text(pkg.description) %}
+ {% module Text(package.description) %}
<ul class="menu simple">
- {% if pkg.url %}
+ {% if package.url %}
<li>
- <a href="{{ pkg.url }}">{{ extract_hostname(pkg.url) }}</a>
+ <a href="{{ package.url }}">{{ extract_hostname(package.url) }}</a>
</li>
{% end %}
- {% if pkg.license %}
+ {% if package.license %}
<li>
- {{ pkg.license }}
+ {{ package.license }}
</li>
{% end %}
- {% if pkg.groups %}
+ {% if package.groups %}
<li>
- {{ locale.list(pkg.groups) }}
+ {{ locale.list(package.groups) }}
</li>
{% end %}
- {% if pkg.maintainer %}
+ {% if package.maintainer %}
<li>
- {% module LinkToUser(pkg.maintainer) %}
+ {% module LinkToUser(package.maintainer) %}
</li>
{% end %}
</ul>
<h5>{{ distro }}</h5>
{% for repo in distro.repositories %}
- {% set builds = repo.get_builds_by_name(pkg.name) %}
+ {% set builds = repo.get_builds_by_name(package.name) %}
{% if builds %}
<h6>{{ repo }}</h6>
</div>
<div class="col-12 col-sm-12 col-md-6 col-lg-6 col-xl-6">
<div class="btn-group">
- <a class="btn btn-secondary" href="{{ backend.bugzilla.enter_url(pkg.name) }}" target="_blank">
+ <a class="btn btn-secondary" href="{{ backend.bugzilla.enter_url(package.name) }}" target="_blank">
{{ _("File new bug") }}
</a>
- <a class="btn btn-secondary" href="{{ backend.bugzilla.buglist_url(pkg.name) }}" target="_blank">
+ <a class="btn btn-secondary" href="{{ backend.bugzilla.buglist_url(package.name) }}" target="_blank">
{{ _("Show all bugs") }}
</a>
</div>
</div>
<div class="row">
<div class="col-12 col-sm-12 col-md-12 col-lg-12 col-xl-12">
- {% module BugsTable(pkg, bugs) %}
+ {% module BugsTable(package, bugs) %}
</div>
</div>
{% end %}
class PackageNameHandler(base.BaseHandler):
def get(self, name):
- builds = self.backend.builds.get_active_builds(name)
- if not builds:
+ build = self.backend.builds.get_latest_by_name(name)
+ if not build:
raise tornado.web.HTTPError(404, "Package '%s' was not found" % name)
- # Get the latest build to show the package meta information.
- latest_build = builds[0]
-
# Get the latest bugs from bugzilla.
bugs = self.backend.bugzilla.get_bugs_from_component(name)
- self.render("package-detail-list.html", name=name, builds=builds,
- latest_build=latest_build, package=latest_build.pkg, pkg=latest_build.pkg, bugs=bugs)
+ self.render("package-detail-list.html", package=build.pkg, bugs=bugs)
class PackageScratchBuildsHandler(base.BaseHandler):