From: Michael Tremer Date: Mon, 10 Jun 2019 23:12:01 +0000 (+0100) Subject: build: Support reading from archives X-Git-Tag: 0.9.28~1285^2~948 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=496a9911da2e5ca3044a31f8218f98363a4f68fa;p=pakfire.git build: Support reading from archives Signed-off-by: Michael Tremer --- diff --git a/src/_pakfire/archive.c b/src/_pakfire/archive.c index 7e3b72002..e50f5c899 100644 --- a/src/_pakfire/archive.c +++ b/src/_pakfire/archive.c @@ -175,6 +175,23 @@ static PyObject* Archive_get_package(ArchiveObject* self) { return ret; } +static PyObject* Archive_get(ArchiveObject* self, PyObject* args) { + const char* key = NULL; + + if (!PyArg_ParseTuple(args, "|s", &key)) + return NULL; + + char* value = pakfire_archive_get(self->archive, key); + + if (!value) + Py_RETURN_NONE; + + PyObject* ret = PyUnicode_FromString(value); + pakfire_free(value); + + return ret; +} + static struct PyMethodDef Archive_methods[] = { { "extract", @@ -182,6 +199,12 @@ static struct PyMethodDef Archive_methods[] = { METH_VARARGS, NULL }, + { + "get", + (PyCFunction)Archive_get, + METH_VARARGS, + NULL + }, { "get_package", (PyCFunction)Archive_get_package, diff --git a/src/libpakfire/libpakfire.sym b/src/libpakfire/libpakfire.sym index 2e1bd7de5..ec4708f11 100644 --- a/src/libpakfire/libpakfire.sym +++ b/src/libpakfire/libpakfire.sym @@ -47,6 +47,7 @@ global: pakfire_archive_create; pakfire_archive_extract; pakfire_archive_extraction_path; + pakfire_archive_get; pakfire_archive_get_filelist; pakfire_archive_get_format; pakfire_archive_get_pakfire; diff --git a/src/pakfire/builder.py b/src/pakfire/builder.py index 140519f67..563539c56 100644 --- a/src/pakfire/builder.py +++ b/src/pakfire/builder.py @@ -536,19 +536,12 @@ class BuilderContext(object): transaction.run() def build(self, package, private_network=True, shell=True): - package = self._prepare_package(package) - assert package + archive = _pakfire.Archive(self.pakfire, package) - # Setup the environment including any build dependencies - self.setup(install=package.requires) - - def _prepare_package(self, package): - # Check if the file exists - if not os.path.exists(package): - raise FileNotFoundError(package) + requires = archive.get("dependencies.requires") - # Try opening the package - return packages.open(self.pakfire, None, package) + # Setup the environment including any build dependencies + self.setup(install=requires.splitlines()) def shell(self, install=[]): if not util.cli_is_interactive():