]> git.ipfire.org Git - pakfire.git/commitdiff
package: Add build ID
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 12 Jun 2021 11:54:13 +0000 (11:54 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 12 Jun 2021 11:54:13 +0000 (11:54 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/_pakfire/pakfire.c
src/libpakfire/archive.c
src/libpakfire/build.c
src/libpakfire/include/pakfire/build.h
src/libpakfire/include/pakfire/package.h
src/libpakfire/libpakfire.sym
src/libpakfire/package.c
src/libpakfire/packager.c

index d11008b6879888ed4f10ff2d349f1ec16b3279b4..dfb7e2efc9824803d93a2e2eca2326ed97a65d9a 100644 (file)
@@ -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);
index 3e1d18c584332fe8d6a67f695a6278267556ecda..44da6a0277149c8113d05c75f0aaea3093624734 100644 (file)
@@ -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) {
index 84edcededef183f2527f04dc6115c3dc2b122710..2b22b8490b2ae136a152b2c9821c07922c5a971b 100644 (file)
@@ -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);
 
index 90edc86d295ad248eba024ece4115ccee66fa012..520ee108fe2f175afa2e82e05f21c0d65c7d7baa 100644 (file)
@@ -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 */
index e4e04a158f04d51feec73e9eeedd2c039397d429..466778d76e8f3072c7bee2c3e1a5b518abb18bed 100644 (file)
@@ -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);
index ef10abfc140413f50bc6e51c10dee387fe2349ba..19c6c4b65163b9c8f1f93d32815643e073373600 100644 (file)
@@ -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;
index 2a9db469b53bbcfbcb0e86442b91f1c86e71988e..80bbc37fa3edafb121d1d61786098c3e4ae6e64c 100644 (file)
@@ -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);
index ed38a617173d95edd0f89418401305a2b5c3a840..9b9e82556ed42fb71fc4432dbd20fb97daab61e8 100644 (file)
@@ -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);