From: Michael Tremer Date: Tue, 21 Jun 2022 15:42:05 +0000 (+0000) Subject: packages: Refactor import X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dc398a6f74fd7f35f8eec8d66f0ca7e5f577305c;p=pbs.git packages: Refactor import Signed-off-by: Michael Tremer --- diff --git a/src/buildservice/jobs.py b/src/buildservice/jobs.py index 74ab5dc4..45dd1e30 100644 --- a/src/buildservice/jobs.py +++ b/src/buildservice/jobs.py @@ -104,7 +104,7 @@ class Job(base.DataObject): @property def name(self): - return "%s-%s.%s" % (self.pkg.name, self.pkg.friendly_version, self.arch) + return "%s-%s.%s" % (self.pkg.name, self.pkg.evr, self.arch) @lazy_property def build(self): diff --git a/src/buildservice/packages.py b/src/buildservice/packages.py index 46f2e5f5..3520cb0c 100644 --- a/src/buildservice/packages.py +++ b/src/buildservice/packages.py @@ -50,81 +50,78 @@ class Packages(base.Object): return Package(self.backend, pkg.id, pkg) - def create(self, path): - # Just check if the file really exist - assert os.path.exists(path) - - _pkg = packages.open(pakfire.PakfireServer(), None, path) - - hash_sha512 = misc.calc_hash(path, "sha512") - assert hash_sha512 - - query = [ - ("name", _pkg.name), - ("epoch", _pkg.epoch), - ("version", _pkg.version), - ("release", _pkg.release), - ("type", _pkg.type), - ("arch", _pkg.arch), - - ("groups", " ".join(_pkg.groups)), - ("maintainer", _pkg.maintainer), - ("license", _pkg.license), - ("url", _pkg.url), - ("summary", _pkg.summary), - ("description", _pkg.description), - ("size", _pkg.inst_size), - ("uuid", _pkg.uuid), - - # Build information. - ("build_id", _pkg.build_id), - ("build_host", _pkg.build_host), - ("build_time", datetime.datetime.utcfromtimestamp(_pkg.build_time)), - - # File "metadata". - ("path", path), - ("filesize", os.path.getsize(path)), - ("hash_sha512", hash_sha512), - ] - - if _pkg.type == "source": - query.append(("supported_arches", _pkg.supported_arches)) - - keys = [] - vals = [] - for key, val in query: - keys.append(key) - vals.append(val) - - _query = "INSERT INTO packages(%s)" % ", ".join(keys) - _query += " VALUES(%s) RETURNING *" % ", ".join("%s" for v in vals) - - # Create package entry in the database. - pkg = self._get_package(_query, *vals) - - # Dependency information. - for d in _pkg.prerequires: - pkg.add_dependency("prerequires", d) - - for d in _pkg.requires: - pkg.add_dependency("requires", d) - - for d in _pkg.provides: - pkg.add_dependency("provides", d) - - for d in _pkg.conflicts: - pkg.add_dependency("conflicts", d) - - for d in _pkg.obsoletes: - pkg.add_dependency("obsoletes", d) - - # Add all files to filelists table - for f in _pkg.filelist: - pkg.add_file(f.name, f.size, f.hash1, f.type, f.config, f.mode, - f.user, f.group, f.mtime, f.capabilities) - - # Return the newly created object - return pkg + def create(self, package): + log.debug("Importing package %s..." % package) + + # XXX need to copy this package to somehwere + + pkg = self._get_package(""" + INSERT INTO + packages + ( + name, + evr, + arch, + uuid, + groups, + maintainer, + license, + url, + summary, + description, + requires, + provides, + conflicts, + obsoletes, + recommends, + suggests, + size, + supported_arches, + build_id, + build_host, + build_time, + path, + filesize, + hash_sha512 + ) + VALUES + ( + %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, + package.evr, + package.arch, + package.uuid, + "", #package.groups, # SEGV + package.maintainer, + package.license, + package.url, + package.summary, + package.description, + package.requires, + package.provides, + package.conflicts, + package.obsoletes, + package.recommends, + package.suggests, + package.installsize, + [], # XXX supported arches + None, # package.build_id, + package.buildhost, + datetime.datetime.fromtimestamp(package.buildtime), + package.path, + package.downloadsize, + package.hexdigest_sha512, + ) + + # XXX Import filelist + for file in package.filelist: + print(file) + + print(pkg) def search(self, pattern, limit=None): """ @@ -232,58 +229,33 @@ class Package(base.DataObject): def size(self): return self.data.size - def add_dependency(self, type, what): - self.db.execute("INSERT INTO packages_deps(pkg_id, type, what) \ - VALUES(%s, %s, %s)", self.id, type, what) - - self.deps.append((type, what)) - - def has_deps(self): - """ - Returns True if the package has got dependencies. - - Always filter out the uuid provides. - """ - return len(self.deps) > 1 - - @lazy_property - def deps(self): - res = self.db.query("SELECT type, what FROM packages_deps \ - WHERE pkg_id = %s", self.id) - - ret = [] - for row in res: - ret.append((row.type, row.what)) - - return ret - - @property - def prerequires(self): - return [d[1] for d in self.deps if d[0] == "prerequires"] + # Dependencies @property def requires(self): - return [d[1] for d in self.deps if d[0] == "requires"] + return self.data.requires @property def provides(self): - return [d[1] for d in self.deps if d[0] == "provides" and not d[1].startswith("uuid(")] + return self.data.provides @property def conflicts(self): - return [d[1] for d in self.deps if d[0] == "conflicts"] + return self.data.conflicts @property def obsoletes(self): - return [d[1] for d in self.deps if d[0] == "obsoletes"] + return self.data.obsoletes @property def suggests(self): - return [d[1] for d in self.deps if d[0] == "suggests"] + return self.data.suggests @property def recommends(self): - return [d[1] for d in self.deps if d[0] == "recommends"] + return self.data.recommends + + # Commit def get_commit(self): if self.data.commit_id: diff --git a/src/database.sql b/src/database.sql index c89c3c42..1dc682fe 100644 --- a/src/database.sql +++ b/src/database.sql @@ -920,7 +920,7 @@ CREATE TABLE public.packages ( evr text NOT NULL, arch text NOT NULL, groups text NOT NULL, - maintainer text NOT NULL, + maintainer text, license text NOT NULL, url text NOT NULL, summary text NOT NULL, @@ -929,12 +929,19 @@ CREATE TABLE public.packages ( supported_arches text, uuid uuid NOT NULL, commit_id integer, - build_id text NOT NULL, + build_id text, build_host text NOT NULL, build_time timestamp without time zone NOT NULL, path text NOT NULL, filesize bigint NOT NULL, - hash_sha512 text NOT NULL + hash_sha512 text NOT NULL, + prerequires text[] DEFAULT ARRAY[]::text[] NOT NULL, + requires text[] DEFAULT ARRAY[]::text[] NOT NULL, + provides text[] DEFAULT ARRAY[]::text[] NOT NULL, + obsoletes text[] DEFAULT ARRAY[]::text[] NOT NULL, + conflicts text[] DEFAULT ARRAY[]::text[] NOT NULL, + recommends text[] DEFAULT ARRAY[]::text[] NOT NULL, + suggests text[] DEFAULT ARRAY[]::text[] NOT NULL ); @@ -964,19 +971,6 @@ ALTER TABLE public.package_estimated_build_times OWNER TO pakfire; COMMENT ON VIEW public.package_estimated_build_times IS 'Should add this later: AND jobs.time_finished >= (CURRENT_TIMESTAMP - ''180 days''::interval)'; --- --- Name: packages_deps; Type: TABLE; Schema: public; Owner: pakfire --- - -CREATE TABLE public.packages_deps ( - pkg_id integer NOT NULL, - type text NOT NULL, - what text NOT NULL -); - - -ALTER TABLE public.packages_deps OWNER TO pakfire; - -- -- Name: packages_id_seq; Type: SEQUENCE; Schema: public; Owner: pakfire -- @@ -2173,13 +2167,6 @@ CREATE INDEX idx_2198132_name ON public.packages USING btree (name); CREATE INDEX idx_2198132_uuid ON public.packages USING btree (uuid); --- --- Name: idx_2198139_pkg_id; Type: INDEX; Schema: public; Owner: pakfire --- - -CREATE INDEX idx_2198139_pkg_id ON public.packages_deps USING btree (pkg_id); - - -- -- Name: idx_2198147_name; Type: INDEX; Schema: public; Owner: pakfire -- @@ -2618,14 +2605,6 @@ ALTER TABLE ONLY public.packages ADD CONSTRAINT packages_commit_id FOREIGN KEY (commit_id) REFERENCES public.sources_commits(id); --- --- Name: packages_deps packages_deps_pkg_id; Type: FK CONSTRAINT; Schema: public; Owner: pakfire --- - -ALTER TABLE ONLY public.packages_deps - ADD CONSTRAINT packages_deps_pkg_id FOREIGN KEY (pkg_id) REFERENCES public.packages(id); - - -- -- Name: repositories_aux repositories_aux_distro_id; Type: FK CONSTRAINT; Schema: public; Owner: pakfire --