From: Michael Tremer Date: Sat, 11 Jan 2025 17:02:29 +0000 (+0000) Subject: build: Refactor copying packages after the build X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=925561ee5408a1902548f960af947583e034fd25;p=people%2Fric9%2Fpakfire.git build: Refactor copying packages after the build Signed-off-by: Michael Tremer --- diff --git a/src/pakfire/build.c b/src/pakfire/build.c index 8b8bcbdb2..8c9f9e56b 100644 --- a/src/pakfire/build.c +++ b/src/pakfire/build.c @@ -2298,26 +2298,27 @@ static int pakfire_build_post_check(struct pakfire_build* build) { } static int pakfire_build_copy_package(struct pakfire_ctx* ctx, - struct pakfire_package* pkg, void* p) { + struct pakfire_package* pkg, void* data) { struct pakfire_archive* archive = NULL; + const char* target = data; char path[PATH_MAX]; int r; - const char* target = (const char*)p; - + // Check inputs if (!target) return -EINVAL; + // Fetch NEVRA + const char* nevra = pakfire_package_get_string(pkg, PAKFIRE_PKG_NEVRA); + // Fetch the package filename const char* filename = pakfire_package_get_string(pkg, PAKFIRE_PKG_FILENAME); - if (!filename) { - r = 1; - goto ERROR; - } + if (!filename) + return -EINVAL; // Format the destination path r = pakfire_string_format(path, "%s/%s", target, filename); - if (r) + if (r < 0) goto ERROR; // Open the archive @@ -2328,9 +2329,11 @@ static int pakfire_build_copy_package(struct pakfire_ctx* ctx, } // Copy it to its destination - r = pakfire_archive_copy(archive, path); - if (r) + r = pakfire_archive_link_or_copy(archive, path); + if (r < 0) { + ERROR(ctx, "Could not write %s to %s: %s\n", nevra, path, strerror(-r)); goto ERROR; + } ERROR: if (archive) @@ -2348,12 +2351,11 @@ static int pakfire_build_copy_packages(struct pakfire_build* build) { // Fetch local repository local = pakfire_get_repo(build->pakfire, PAKFIRE_REPO_LOCAL); -#if 0 // Copy all packages to the target path if (*build->target) { - r = pakfire_packagelist_walk(build->packages, + r = pakfire_repo_walk_packages(build->repo, pakfire_build_copy_package, build->target, 0); - if (r) + if (r < 0) goto ERROR; } @@ -2361,13 +2363,12 @@ static int pakfire_build_copy_packages(struct pakfire_build* build) { if (local) { const char* path = pakfire_repo_get_path(local); if (path) { - r = pakfire_packagelist_walk(build->packages, - pakfire_build_copy_package, (void*)path, 0); - if (r) + r = pakfire_repo_walk_packages(build->repo, + pakfire_build_copy_package, (char*)path, 0); + if (r < 0) goto ERROR; } } -#endif ERROR: if (local)