From: Michael Tremer Date: Tue, 18 Oct 2022 18:01:31 +0000 (+0000) Subject: packages: Fetch distribution from package X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=64991f9f04dabd1fc0a7d7c793fbc5801bf87fe0;p=pbs.git packages: Fetch distribution from package Signed-off-by: Michael Tremer --- diff --git a/Makefile.am b/Makefile.am index 47267050..7f8f748b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -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 \ diff --git a/src/buildservice/distribution.py b/src/buildservice/distribution.py index ab6ef3c3..16ecf04f 100644 --- a/src/buildservice/distribution.py +++ b/src/buildservice/distribution.py @@ -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) diff --git a/src/buildservice/packages.py b/src/buildservice/packages.py index a9d8b676..c1e0f1ef 100644 --- a/src/buildservice/packages.py +++ b/src/buildservice/packages.py @@ -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): diff --git a/src/database.sql b/src/database.sql index a5b0b3d3..145270c6 100644 --- a/src/database.sql +++ b/src/database.sql @@ -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: - --