]> git.ipfire.org Git - pbs.git/commitdiff
search: Make search for filenames more sane
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 17 Oct 2022 17:22:15 +0000 (17:22 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 17 Oct 2022 17:22:15 +0000 (17:22 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/packages.py
src/templates/search.html

index 3c9f2e7de780390348825845dcf7cfb70747f97a..7761ab3b72b4cb29f661c2143a9c8841157fa124 100644 (file)
@@ -187,21 +187,25 @@ class Packages(base.Object):
                self.db.execute("REFRESH MATERIALIZED VIEW package_search_index")
 
        def search_by_filename(self, filename, limit=None):
-               query = "SELECT filelists.* FROM filelists \
-                       JOIN packages ON filelists.pkg_id = packages.id \
-                       WHERE filelists.name = %s ORDER BY packages.build_time DESC"
-               args = [filename,]
-
-               if limit:
-                       query += " LIMIT %s"
-                       args.append(limit)
-
-               files = []
-               for result in self.db.query(query, *args):
-                       pkg = Package(self.backend, result.pkg_id)
-                       files.append((pkg, result))
+               packages = self._get_packages("""
+                       SELECT
+                               DISTINCT ON (packages.name)
+                               packages.*
+                       FROM
+                               filelists
+                       LEFT JOIN
+                               packages ON filelists.pkg_id = packages.id
+                       WHERE
+                               filelists.path = %s
+                       ORDER BY
+                               packages.name,
+                               packages.build_time DESC
+                       LIMIT
+                               %s
+                       """, filename, limit,
+               )
 
-               return files
+               return list(packages)
 
 
 class Package(base.DataObject):
index c86d498f2323398e89bc09ed4e283a1ffe632be1..2ee5845ffa3446e48102f4d9da41f8cf954e7192 100644 (file)
                                {% for file in files %}
                                        <tr>
                                                <th scope="row">
-                                                       <a href="/packages/{{ package.uuid }}">{{ file.name }}</a>
+                                                       <a href="/packages/{{ file.uuid }}">{{ file.name }}</a>
                                                </th>
                                                <td>
-                                                       {{ file.pkg }}
+                                                       {{ file }}
                                                </td>
                                        </tr>
                                {% end %}