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):
"""
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:
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,
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
);
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
--
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
--
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
--