]> git.ipfire.org Git - pbs.git/commitdiff
sources: Deprecate any builds when a package is deleted
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 25 Oct 2022 12:06:42 +0000 (12:06 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 25 Oct 2022 12:06:42 +0000 (12:06 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/sources.py

index b393c487c591821b57e8a9479f29e6f5cf92e183..cac2a7a8a1576162714c68c9519af4b829e69f3d 100644 (file)
@@ -344,9 +344,9 @@ class Source(base.DataObject):
                        else:
                                dist_files.append(filename)
 
-               # Obsolete any deleted packages
+               # Deprecate any deleted packages
                if deleted_packages:
-                       pass # XXX TODO
+                       self._deprecate_packages(deleted_packages)
 
                # Create builds from all other changed files
                if dist_files:
@@ -364,6 +364,32 @@ class Source(base.DataObject):
 
                return name
 
+       def _deprecate_packages(self, names):
+               """
+                       Called to deprecate any packages that match any of the names
+               """
+               builds = self.backend.builds._get_builds("""
+                       SELECT
+                               *
+                       FROM
+                               builds
+                       LEFT JOIN
+                               packages ON builds.pkg_id = packages.id
+                       WHERE
+                               builds.deleted_at IS NULL
+                       AND
+                               builds.deprecated_by IS NULL
+                       AND
+                               builds.build_repo_id = %s
+                       AND
+                               packages.name = ANY(%s)
+                       """, self.repo, names,
+               )
+
+               # Deprecate all matching builds
+               for build in builds:
+                       build.deprecate()
+
        async def _dist_files(self, git, revision, files):
                """
                        Runs "pakfire dist" on all given files at the given revision