From: Michael Tremer Date: Sat, 12 Jun 2021 11:54:13 +0000 (+0000) Subject: package: Add build ID X-Git-Tag: 0.9.28~1268 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7996020a239d352010b026aafd96dff9d9b4aca3;p=pakfire.git package: Add build ID Signed-off-by: Michael Tremer --- diff --git a/src/_pakfire/pakfire.c b/src/_pakfire/pakfire.c index d11008b68..dfb7e2efc 100644 --- a/src/_pakfire/pakfire.c +++ b/src/_pakfire/pakfire.c @@ -825,7 +825,7 @@ static PyObject* Pakfire_build(PakfireObject* self, PyObject* args, PyObject* kw Pakfire_execute_logging_callback = logging_callback; // Run build - int r = pakfire_build(self->pakfire, path, NULL, flags, + int r = pakfire_build(self->pakfire, path, NULL, NULL, flags, (logging_callback) ? __Pakfire_execute_logging_callback : NULL, NULL); return execute_return_value(r); diff --git a/src/libpakfire/archive.c b/src/libpakfire/archive.c index 3e1d18c58..44da6a027 100644 --- a/src/libpakfire/archive.c +++ b/src/libpakfire/archive.c @@ -1620,6 +1620,13 @@ PAKFIRE_EXPORT PakfirePackage pakfire_archive_make_package(PakfireArchive archiv free(build_host); } + // Set build ID + char* build_id = pakfire_archive_get(archive, "build", "id"); + if (build_id) { + pakfire_package_set_build_id(pkg, build_id); + free(build_id); + } + // Set build time char* build_time = pakfire_archive_get(archive, "build", "time"); if (build_time) { diff --git a/src/libpakfire/build.c b/src/libpakfire/build.c index 84edceded..2b22b8490 100644 --- a/src/libpakfire/build.c +++ b/src/libpakfire/build.c @@ -595,7 +595,7 @@ static int pakfire_build_package_add_scriptlets(Pakfire pakfire, PakfireParser m } static int pakfire_build_package(Pakfire pakfire, PakfireParser makefile, - const char* buildroot, const char* namespace, const char* target) { + const char* id, const char* buildroot, const char* namespace, const char* target) { PakfireRepo repo = NULL; PakfirePackage pkg = NULL; struct pakfire_packager* packager = NULL; @@ -628,6 +628,10 @@ static int pakfire_build_package(Pakfire pakfire, PakfireParser makefile, goto ERROR; } + // Set build ID + if (id) + pakfire_package_set_build_id(pkg, id); + // Create a packager r = pakfire_packager_create(&packager, pkg); if (r) @@ -676,7 +680,7 @@ ERROR: } static int pakfire_build_packages(Pakfire pakfire, PakfireParser makefile, - const char* buildroot, const char* target) { + const char* id, const char* buildroot, const char* target) { DEBUG(pakfire, "Creating packages..."); int r = 1; @@ -697,7 +701,7 @@ static int pakfire_build_packages(Pakfire pakfire, PakfireParser makefile, // Build packages in reverse order for (int i = num_packages - 1; i >= 0; i--) { - r = pakfire_build_package(pakfire, makefile, buildroot, packages[i], target); + r = pakfire_build_package(pakfire, makefile, id, buildroot, packages[i], target); if (r) goto ERROR; } @@ -786,11 +790,12 @@ static int pakfire_build_run_post_build_scripts(Pakfire pakfire, const char* bui } PAKFIRE_EXPORT int pakfire_build(Pakfire pakfire, const char* path, - const char* target, int flags, + const char* target, const char* id, int flags, pakfire_execute_logging_callback logging_callback, void* data) { PakfireParser makefile = NULL; char buildroot[PATH_MAX]; struct pakfire_parser_error* error = NULL; + char* generated_id = NULL; int r; // Check for valid input @@ -838,6 +843,15 @@ PAKFIRE_EXPORT int pakfire_build(Pakfire pakfire, const char* path, goto ERROR; } + // If no build ID was passed, we generate a random one + if (!id) { + generated_id = pakfire_generate_uuid(); + if (!generated_id) + goto ERROR; + + id = generated_id; + } + // Set BUILDROOT pakfire_parser_set(makefile, NULL, "BUILDROOT", buildroot_rel, 0); @@ -859,13 +873,15 @@ PAKFIRE_EXPORT int pakfire_build(Pakfire pakfire, const char* path, goto ERROR; // Create the packages - r = pakfire_build_packages(pakfire, makefile, buildroot_rel, target); + r = pakfire_build_packages(pakfire, makefile, id, buildroot_rel, target); if (r) { ERROR(pakfire, "Could not create packages: %s\n", strerror(errno)); goto ERROR; } ERROR: + if (generated_id) + free(generated_id); if (makefile) pakfire_parser_unref(makefile); diff --git a/src/libpakfire/include/pakfire/build.h b/src/libpakfire/include/pakfire/build.h index 90edc86d2..520ee108f 100644 --- a/src/libpakfire/include/pakfire/build.h +++ b/src/libpakfire/include/pakfire/build.h @@ -30,8 +30,8 @@ enum pakfire_build_flags { int pakfire_build_setup(Pakfire pakfire); -int pakfire_build(Pakfire pakfire, const char* path, const char* target, int flags, - pakfire_execute_logging_callback logging_callback, void* data); +int pakfire_build(Pakfire pakfire, const char* path, const char* target, + const char* id, int flags, pakfire_execute_logging_callback logging_callback, void* data); int pakfire_shell(Pakfire pakfire); #endif /* PAKFIRE_BUILD_H */ diff --git a/src/libpakfire/include/pakfire/package.h b/src/libpakfire/include/pakfire/package.h index e4e04a158..466778d76 100644 --- a/src/libpakfire/include/pakfire/package.h +++ b/src/libpakfire/include/pakfire/package.h @@ -75,6 +75,8 @@ void pakfire_package_set_installsize(PakfirePackage pkg, unsigned long long inst unsigned long long pakfire_package_get_size(PakfirePackage pkg); const char* pakfire_package_get_build_host(PakfirePackage pkg); void pakfire_package_set_build_host(PakfirePackage pkg, const char* build_host); +const char* pakfire_package_get_build_id(PakfirePackage pkg); +void pakfire_package_set_build_id(PakfirePackage pkg, const char* build_id); time_t pakfire_package_get_build_time(PakfirePackage pkg); void pakfire_package_set_build_time(PakfirePackage pkg, time_t build_time); time_t pakfire_package_get_install_time(PakfirePackage pkg); diff --git a/src/libpakfire/libpakfire.sym b/src/libpakfire/libpakfire.sym index ef10abfc1..19c6c4b65 100644 --- a/src/libpakfire/libpakfire.sym +++ b/src/libpakfire/libpakfire.sym @@ -141,6 +141,7 @@ global: pakfire_package_dump; pakfire_package_get_arch; pakfire_package_get_build_host; + pakfire_package_get_build_id; pakfire_package_get_build_time; pakfire_package_get_cache_path; pakfire_package_get_checksum; @@ -178,6 +179,7 @@ global: pakfire_package_ref; pakfire_package_set_arch; pakfire_package_set_build_host; + pakfire_package_set_build_id; pakfire_package_set_build_time; pakfire_package_set_checksum; pakfire_package_set_description; diff --git a/src/libpakfire/package.c b/src/libpakfire/package.c index 2a9db469b..80bbc37fa 100644 --- a/src/libpakfire/package.c +++ b/src/libpakfire/package.c @@ -583,6 +583,14 @@ PAKFIRE_EXPORT void pakfire_package_set_build_host(PakfirePackage pkg, const cha pakfire_package_set_string(pkg, SOLVABLE_BUILDHOST, build_host); } +PAKFIRE_EXPORT const char* pakfire_package_get_build_id(PakfirePackage pkg) { + return pakfire_package_get_string(pkg, SOLVABLE_BUILDVERSION); +} + +PAKFIRE_EXPORT void pakfire_package_set_build_id(PakfirePackage pkg, const char* build_id) { + pakfire_package_set_string(pkg, SOLVABLE_BUILDVERSION, build_id); +} + PAKFIRE_EXPORT time_t pakfire_package_get_build_time(PakfirePackage pkg) { return pakfire_package_get_num(pkg, SOLVABLE_BUILDTIME); } @@ -848,6 +856,11 @@ PAKFIRE_EXPORT char* pakfire_package_dump(PakfirePackage pkg, int flags) { const char* uuid = pakfire_package_get_uuid(pkg); pakfire_package_dump_add_line(&string, _("UUID"), uuid); + // Build ID + const char* build_id = pakfire_package_get_build_id(pkg); + if (build_id) + pakfire_package_dump_add_line(&string, _("Build ID"), build_id); + // Build time time_t build_time = pakfire_package_get_build_time(pkg); pakfire_package_dump_add_line_date(&string, _("Build Time"), build_time); diff --git a/src/libpakfire/packager.c b/src/libpakfire/packager.c index ed38a6171..9b9e82556 100644 --- a/src/libpakfire/packager.c +++ b/src/libpakfire/packager.c @@ -549,7 +549,6 @@ static char* pakfire_package_make_metadata(struct pakfire_packager* packager) { goto ERROR; } -#if 0 // Write build id const char* build_id = pakfire_package_get_build_id(pkg); if (build_id) { @@ -557,7 +556,6 @@ static char* pakfire_package_make_metadata(struct pakfire_packager* packager) { if (r < 0) goto ERROR; } -#endif // Write build host time_t build_time = pakfire_package_get_build_time(pkg);