From d645123899b2ff84aa1a0f0f2fe0ff4cd2bb9c29 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 31 Oct 2022 15:12:14 +0000 Subject: [PATCH] build: Create a new repository for the build result That will allow us to perform some post-build checks. Signed-off-by: Michael Tremer --- src/libpakfire/build.c | 66 ++++++++++++++++++++++++++- src/libpakfire/include/pakfire/repo.h | 1 + 2 files changed, 65 insertions(+), 2 deletions(-) diff --git a/src/libpakfire/build.c b/src/libpakfire/build.c index 12b8a5a25..decfec879 100644 --- a/src/libpakfire/build.c +++ b/src/libpakfire/build.c @@ -74,6 +74,9 @@ struct pakfire_build { // Local build repo struct pakfire_repo* repo; + // The result repository + struct pakfire_repo* result; + // Buildroot char buildroot[PATH_MAX]; @@ -643,6 +646,11 @@ static int pakfire_build_packages(struct pakfire_build* build, goto ERROR; } + // Rescan the build repository to import all packages again + r = pakfire_repo_scan(build->result, 0); + if (r) + goto ERROR; + // Success r = 0; @@ -737,6 +745,11 @@ static int pakfire_build_run_post_build_scripts(struct pakfire_build* build) { } static void pakfire_build_free(struct pakfire_build* build) { + if (build->result) { + pakfire_repo_clean(build->result, PAKFIRE_REPO_CLEAN_FLAGS_DESTROY); + pakfire_repo_unref(build->result); + } + if (build->repo) pakfire_repo_unref(build->repo); @@ -933,14 +946,14 @@ static int pakfire_build_setup_ccache(struct pakfire_build* build) { return 0; } -static int pakfire_build_setup_repos(struct pakfire_build* build) { +static int pakfire_build_setup_local_repo(struct pakfire_build* build) { int r; // Create a new repository r = pakfire_repo_create(&build->repo, build->pakfire, PAKFIRE_REPO_LOCAL); if (r) { ERROR(build->pakfire, "Could not create repository %s: %m\n", PAKFIRE_REPO_LOCAL); - return 1; + return r; } // Set description @@ -955,6 +968,55 @@ static int pakfire_build_setup_repos(struct pakfire_build* build) { return 0; } +static int pakfire_build_setup_result_repo(struct pakfire_build* build) { + char path[PATH_MAX] = "/var/tmp/.pakfire-build-repo.XXXXXX"; + char url[PATH_MAX]; + int r; + + // Create a new repository + r = pakfire_repo_create(&build->result, build->pakfire, PAKFIRE_REPO_RESULT); + if (r) { + ERROR(build->pakfire, "Could not create repository %s: %m", PAKFIRE_REPO_RESULT); + return r; + } + + // Set description + pakfire_repo_set_description(build->result, _("Build Repository")); + + // Create a temporary directory + const char* p = pakfire_mkdtemp(path); + if (!p) { + ERROR(build->pakfire, "Could not create a the build repository: %m\n"); + return 1; + } + + // Format the URL + r = pakfire_string_format(url, "file://%s", path); + if (r) + return r; + + // Set the URL + pakfire_repo_set_baseurl(build->result, url); + + return r; +} + +static int pakfire_build_setup_repos(struct pakfire_build* build) { + int r; + + // Set up the local repository + r = pakfire_build_setup_local_repo(build); + if (r) + return r; + + // Setup the result repository + r = pakfire_build_setup_result_repo(build); + if (r) + return r; + + return 0; +} + PAKFIRE_EXPORT int pakfire_build_create(struct pakfire_build** build, struct pakfire* pakfire, const char* id, int flags) { int r; diff --git a/src/libpakfire/include/pakfire/repo.h b/src/libpakfire/include/pakfire/repo.h index e1a0ffd44..fa47ce337 100644 --- a/src/libpakfire/include/pakfire/repo.h +++ b/src/libpakfire/include/pakfire/repo.h @@ -106,6 +106,7 @@ int pakfire_repo_compose(struct pakfire* pakfire, const char* path, int flags, #define PAKFIRE_REPO_LOCAL "local" #define PAKFIRE_REPO_LOCAL_PATH "file://" PAKFIRE_PRIVATE_DIR "/local/%{distro}/%{version}" #define PAKFIRE_REPO_LOCAL_PRIORITY 1000 +#define PAKFIRE_REPO_RESULT "@build" #define PAKFIRE_REPO_SYSTEM "@system" int pakfire_repo_name_equals(struct pakfire_repo* repo, const char* name); -- 2.39.5