From: Michael Tremer Date: Tue, 17 May 2022 14:09:20 +0000 (+0000) Subject: packages: Add distribution information X-Git-Tag: 0.9.28~790 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ca002cae83a5b1efefd8cc7e011b983b0205afef;p=pakfire.git packages: Add distribution information Signed-off-by: Michael Tremer --- diff --git a/src/_pakfire/package.c b/src/_pakfire/package.c index 5c79c01c7..783e813f8 100644 --- a/src/_pakfire/package.c +++ b/src/_pakfire/package.c @@ -315,6 +315,20 @@ static void Package_set_vendor(PackageObject* self, PyObject* value) { pakfire_package_set_vendor(self->package, vendor); } +static PyObject* Package_get_distribution(PackageObject* self) { + const char* distribution = pakfire_package_get_distribution(self->package); + if (!distribution) + Py_RETURN_NONE; + + return PyUnicode_FromString(distribution); +} + +static void Package_set_distribution(PackageObject* self, PyObject* value) { + const char* distribution = PyUnicode_AsUTF8(value); + + pakfire_package_set_distribution(self->package, distribution); +} + static PyObject* Package_get_maintainer(PackageObject* self) { const char* maintainer = pakfire_package_get_maintainer(self->package); if (!maintainer) @@ -816,6 +830,13 @@ static struct PyGetSetDef Package_getsetters[] = { NULL, NULL }, + { + "distribution", + (getter)Package_get_distribution, + (setter)Package_set_distribution, + NULL, + NULL + }, { "maintainer", (getter)Package_get_maintainer, diff --git a/src/libpakfire/archive.c b/src/libpakfire/archive.c index bfb83eab7..18653c12e 100644 --- a/src/libpakfire/archive.c +++ b/src/libpakfire/archive.c @@ -2115,6 +2115,11 @@ static int pakfire_archive_make_package_from_json(struct pakfire_archive* archiv if (vendor) pakfire_package_set_vendor(pkg, vendor); + // Distribution + const char* distribution = pakfire_archive_metadata_get(archive, "distribution", NULL); + if (distribution) + pakfire_package_set_distribution(pkg, distribution); + // UUID const char* uuid = pakfire_archive_metadata_get(archive, "uuid", NULL); if (uuid) diff --git a/src/libpakfire/build.c b/src/libpakfire/build.c index 5e4d15c8b..b7c91f815 100644 --- a/src/libpakfire/build.c +++ b/src/libpakfire/build.c @@ -476,6 +476,11 @@ static int pakfire_build_package(struct pakfire* pakfire, struct pakfire_parser* goto ERROR; } + // Set distribution + const char* distribution = pakfire_parser_get(makefile, NULL, "DISTRO_NAME"); + if (distribution) + pakfire_package_set_distribution(pkg, distribution); + // Set build ID pakfire_package_set_build_id_from_uuid(pkg, build_id); diff --git a/src/libpakfire/db.c b/src/libpakfire/db.c index 23a878fe9..f153bcef9 100644 --- a/src/libpakfire/db.c +++ b/src/libpakfire/db.c @@ -370,7 +370,8 @@ static int pakfire_db_create_schema(struct pakfire_db* db) { "repository TEXT, " "source_name TEXT, " "source_evr TEXT, " - "source_arch TEXT" + "source_arch TEXT, " + "distribution TEXT" ")"); if (r) return 1; @@ -1266,7 +1267,8 @@ int pakfire_db_add_package(struct pakfire_db* db, "userinstalled, " "source_name, " "source_evr, " - "source_arch" + "source_arch, " + "distribution" ") VALUES(" "?, " "?, " @@ -1288,6 +1290,7 @@ int pakfire_db_add_package(struct pakfire_db* db, "?, " "?, " "?, " + "?, " "?" ")"; @@ -1510,6 +1513,18 @@ int pakfire_db_add_package(struct pakfire_db* db, goto ERROR; } + // Distribution + const char* distribution = pakfire_package_get_distribution(pkg); + if (distribution) { + r = sqlite3_bind_text(stmt, 21, distribution, -1, NULL); + if (r) + goto ERROR; + } else { + r = sqlite3_bind_null(stmt, 21); + if (r) + goto ERROR; + } + // Run query do { r = sqlite3_step(stmt); @@ -1850,6 +1865,11 @@ static int pakfire_db_load_package(struct pakfire_db* db, struct pakfire_repo* r if (source_arch) pakfire_package_set_source_arch(pkg, source_arch); + // Distribution + const char* distribution = (const char*)sqlite3_column_text(stmt, 31); + if (distribution) + pakfire_package_set_distribution(pkg, distribution); + // Success r = 0; @@ -1934,7 +1954,8 @@ int pakfire_db_load(struct pakfire_db* db, struct pakfire_repo* repo) { ") AS enhances, " "source_name, " "source_evr, " - "source_arch " + "source_arch, " + "distribution " "FROM " "packages" ";"; diff --git a/src/libpakfire/include/pakfire/package.h b/src/libpakfire/include/pakfire/package.h index 7ad9f0416..728e7e7bb 100644 --- a/src/libpakfire/include/pakfire/package.h +++ b/src/libpakfire/include/pakfire/package.h @@ -71,6 +71,8 @@ char* pakfire_package_get_groups(struct pakfire_package* pkg); void pakfire_package_set_groups(struct pakfire_package* pkg, const char* groups); const char* pakfire_package_get_vendor(struct pakfire_package* pkg); void pakfire_package_set_vendor(struct pakfire_package* pkg, const char* vendor); +const char* pakfire_package_get_distribution(struct pakfire_package* pkg); +void pakfire_package_set_distribution(struct pakfire_package* pkg, const char* distribution); const char* pakfire_package_get_maintainer(struct pakfire_package* pkg); void pakfire_package_set_maintainer(struct pakfire_package* pkg, const char* maintainer); const char* pakfire_package_get_filename(struct pakfire_package* pkg); diff --git a/src/libpakfire/libpakfire.sym b/src/libpakfire/libpakfire.sym index 9d380bc6f..fd1720737 100644 --- a/src/libpakfire/libpakfire.sym +++ b/src/libpakfire/libpakfire.sym @@ -148,6 +148,7 @@ global: pakfire_package_get_conflicts; pakfire_package_get_description; pakfire_package_get_digest; + pakfire_package_get_distribution; pakfire_package_get_downloadsize; pakfire_package_get_enhances; pakfire_package_get_evr; @@ -190,6 +191,7 @@ global: pakfire_package_set_build_time; pakfire_package_set_checksum; pakfire_package_set_description; + pakfire_package_set_distribution; pakfire_package_set_downloadsize; pakfire_package_set_evr; pakfire_package_set_filelist; diff --git a/src/libpakfire/package.c b/src/libpakfire/package.c index ec6198ea4..fa642b6a3 100644 --- a/src/libpakfire/package.c +++ b/src/libpakfire/package.c @@ -568,6 +568,14 @@ PAKFIRE_EXPORT void pakfire_package_set_vendor(struct pakfire_package* pkg, cons pakfire_package_set_string(pkg, SOLVABLE_VENDOR, vendor); } +PAKFIRE_EXPORT const char* pakfire_package_get_distribution(struct pakfire_package* pkg) { + return pakfire_package_get_string(pkg, SOLVABLE_DISTRIBUTION); +} + +PAKFIRE_EXPORT void pakfire_package_set_distribution(struct pakfire_package* pkg, const char* distribution) { + pakfire_package_set_string(pkg, SOLVABLE_DISTRIBUTION, distribution); +} + PAKFIRE_EXPORT const char* pakfire_package_get_maintainer(struct pakfire_package* pkg) { return pakfire_package_get_string(pkg, SOLVABLE_PACKAGER); } @@ -1630,6 +1638,14 @@ struct json_object* pakfire_package_to_json(struct pakfire_package* pkg) { goto ERROR; } + // Distribution + const char* distribution = pakfire_package_get_distribution(pkg); + if (distribution) { + r = pakfire_json_add_string(pkg->pakfire, md, "distribution", distribution); + if (r) + goto ERROR; + } + // UUID const char* uuid = pakfire_package_get_uuid(pkg); if (uuid) {