]> git.ipfire.org Git - pbs.git/commitdiff
packages: Fetch only the latest build
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 22 Jun 2022 08:59:54 +0000 (08:59 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 22 Jun 2022 08:59:54 +0000 (08:59 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/builds.py
src/templates/package-detail-list.html
src/web/packages.py

index 112e06308afa19792a71e1cdb473a4cfd2499d45..65fb060a97d3eb567890715aa2c16519745f431f 100644 (file)
@@ -104,34 +104,23 @@ class Builds(base.Object):
                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):
                """
@@ -826,15 +815,6 @@ class Build(base.DataObject):
 
                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 \
index b20ecde30b113bf844a876369651f974475f9230..6a7a64d034794f7d4c655aeb1e7adb82d3acbba2 100644 (file)
@@ -1,6 +1,6 @@
 {% 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>
@@ -59,7 +59,7 @@
                <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>
@@ -99,7 +99,7 @@
                </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 %}
index f9c89de14445ac7b3a562f49e3334cb611633a02..a953cb20731b106d7399f7cf97a6d4cbfe043ec0 100644 (file)
@@ -36,18 +36,14 @@ class PackageIDDetailHandler(base.BaseHandler):
 
 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):