]> git.ipfire.org Git - pbs.git/commitdiff
packages: Fetch distribution from package
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 18 Oct 2022 18:01:31 +0000 (18:01 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 18 Oct 2022 18:01:31 +0000 (18:01 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
Makefile.am
src/buildservice/distribution.py
src/buildservice/packages.py
src/database.sql

index 472670500d474f8a817d4e23f7d4ecb07e1247f4..7f8f748bf4050278e76e1e6d9489bb3eb91c5621 100644 (file)
@@ -93,6 +93,7 @@ buildservice_PYTHON = \
        src/buildservice/database.py \
        src/buildservice/decorators.py \
        src/buildservice/distribution.py \
+       src/buildservice/errors.py \
        src/buildservice/events.py \
        src/buildservice/git.py \
        src/buildservice/jobqueue.py \
index ab6ef3c3ccb3eb39756291863697706536de872e..16ecf04f121cf11fccb6af43aea3ce7ddaf36745 100644 (file)
@@ -38,6 +38,19 @@ class Distributions(base.Object):
                return self._get_distribution("SELECT * FROM distributions \
                        WHERE slug = %s AND deleted IS FALSE", slug)
 
+       def get_by_tag(self, tag):
+               return self._get_distribution("""
+                       SELECT
+                               *
+                       FROM
+                               distributions
+                       WHERE
+                               deleted IS FALSE
+                       AND
+                               tag = %s
+                       """, tag,
+               )
+
        def create(self, name, tag):
                slug = misc.normalize(name)
 
index a9d8b676a77c6b949b8102ec7ba024aebe39bc75..c1e0f1ef3efde8366a0c8ed005f82425159e94dd 100644 (file)
@@ -16,6 +16,7 @@ from . import misc
 
 from .constants import *
 from .decorators import *
+from .errors import *
 
 # Setup logging
 log = logging.getLogger("pakfire.buildservice.packages")
@@ -94,6 +95,13 @@ class Packages(base.Object):
 
                log.debug("Importing package %s..." % package)
 
+               # Find a matching distribution
+               distro = self.backend.distros.get_by_tag(package.distribution)
+               if not distro:
+                       log.error("Could not find distribution '%s'" % package.distribution)
+
+                       raise NoSuchDistroError(package.distribution)
+
                pkg = self._get_package("""
                        INSERT INTO
                                packages
@@ -103,6 +111,7 @@ class Packages(base.Object):
                                arch,
                                uuid,
                                groups,
+                               distro_id,
                                maintainer,
                                license,
                                url,
@@ -127,7 +136,7 @@ class Packages(base.Object):
                        (
                                %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,
                                %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,
-                               %s, %s, %s, %s
+                               %s, %s, %s, %s, %s
                        )
                        RETURNING *""",
                        package.name,
@@ -135,6 +144,7 @@ class Packages(base.Object):
                        package.arch,
                        package.uuid,
                        "", #package.groups, # SEGV
+                       distro,
                        package.maintainer,
                        package.license,
                        package.url,
@@ -341,12 +351,10 @@ class Package(base.DataObject):
 
        commit = lazy_property(get_commit, set_commit)
 
-       @property
-       def distro(self):
-               # XXX THIS CANNOT RETURN None
+       # Distro
 
-               if self.commit:
-                       return self.commit.distro
+       def distro(self):
+               return self.backend.distros.get_by_id(self.data.distro_id)
 
        @property
        def build_id(self):
index a5b0b3d3ba41095db71d5a44f95f910b8424dc41..145270c6fc45e629e0d83d63c0222f0fad73a9aa 100644 (file)
@@ -628,7 +628,8 @@ CREATE TABLE public.packages (
     digest_type text NOT NULL,
     digest bytea NOT NULL,
     deleted_at timestamp without time zone,
-    deleted_by integer
+    deleted_by integer,
+    distro_id integer NOT NULL
 );
 
 
@@ -1853,6 +1854,14 @@ ALTER TABLE ONLY public.packages
     ADD CONSTRAINT packages_deleted_by FOREIGN KEY (deleted_by) REFERENCES public.users(id);
 
 
+--
+-- Name: packages packages_distro_id; Type: FK CONSTRAINT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY public.packages
+    ADD CONSTRAINT packages_distro_id FOREIGN KEY (distro_id) REFERENCES public.distributions(id);
+
+
 --
 -- Name: repo_builds repo_builds_added_by; Type: FK CONSTRAINT; Schema: public; Owner: -
 --