]> git.ipfire.org Git - pbs.git/commitdiff
packages: Refactor import
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 21 Jun 2022 15:42:05 +0000 (15:42 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 21 Jun 2022 15:42:05 +0000 (15:42 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/jobs.py
src/buildservice/packages.py
src/database.sql

index 74ab5dc47cc1a410d8da71a25ec518afdd1814fe..45dd1e3065f6ffcb4ac515d57154d435fbf7586a 100644 (file)
@@ -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):
index 46f2e5f5da7cdf04a330a3dc83f59ea00cb03add..3520cb0c108e2b6eed068031b07031e5a368cd8e 100644 (file)
@@ -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:
index c89c3c42198cebbb67bad4a83038bd91ded15660..1dc682febfe7647afe99f785ecd5b31201a606db 100644 (file)
@@ -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
 --