// The build repository
struct pakfire_repo* repo;
+ // The local repository
+ struct pakfire_repo* local;
+
// Buildroot
char buildroot[PATH_MAX];
pakfire_repo_unref(build->repo);
}
+ // Free the local repository
+ if (build->local)
+ pakfire_repo_unref(build->local);
+
if (build->jail)
pakfire_jail_unref(build->jail);
if (build->env)
return 0;
}
+static int pakfire_build_setup_local_repo(struct pakfire_build* self) {
+ char path[PATH_MAX];
+ char url[PATH_MAX];
+ int r;
+
+ // Fetch distro ID
+ const char* distro_id = pakfire_get_distro_id(self->pakfire);
+ if (!distro_id) {
+ ERROR(self->ctx, "Could not fetch the distro ID\n");
+ return -EINVAL;
+ }
+
+ // Fetch the distro version ID
+ const char* version_id = pakfire_get_distro_version_id(self->pakfire);
+ if (!version_id) {
+ ERROR(self->ctx, "Could not fetch the distro version ID\n");
+ return -EINVAL;
+ }
+
+ // Make the repository path
+ r = pakfire_string_format(path,
+ "~/.local/share/%s/%s/%s", PACKAGE_NAME, distro_id, version_id);
+ if (r < 0) {
+ ERROR(self->ctx, "Could not compose the local repository path: %s\n", strerror(-r));
+ return r;
+ }
+
+ // Expand the path
+ r = pakfire_path_expand(path, path);
+ if (r < 0) {
+ ERROR(self->ctx, "Could not expand the local repository path: %s\n", strerror(-r));
+ return r;
+ }
+
+ // Create the path
+ r = pakfire_mkdir(path, 0700);
+ if (r < 0) {
+ ERROR(self->ctx, "Could not create the local repository at %s: %s\n",
+ path, strerror(-r));
+ return r;
+ }
+
+ // Create a new repository
+ r = pakfire_repo_create(&self->local, self->pakfire, PAKFIRE_REPO_LOCAL);
+ if (r < 0) {
+ ERROR(self->ctx, "Could not create local repository: %s\n", strerror(-r));
+ return r;
+ }
+
+ // Set description
+ r = pakfire_repo_set_description(self->local, _("Locally Built Packages"));
+ if (r < 0) {
+ ERROR(self->ctx, "Could not set local repository description: %s\n", strerror(-r));
+ return r;
+ }
+
+ // Compose the URL
+ r = pakfire_string_format(url, "file://%s", path);
+ if (r < 0) {
+ ERROR(self->ctx, "Could not compose the local repository URL: %s\n", strerror(-r));
+ return r;
+ }
+
+ // Set the URL
+ r = pakfire_repo_set_baseurl(self->local, url);
+ if (r < 0) {
+ ERROR(self->ctx, "Could not set local repository URL: %s\n", strerror(-r));
+ return r;
+ }
+
+ return 0;
+}
+
static int pakfire_build_setup_repo(struct pakfire_build* build) {
char path[PATH_MAX] = PAKFIRE_TMP_DIR "/pakfire-build-repo.XXXXXX";
char url[PATH_MAX];
int r;
+ // Create a local repository for local builds
+ if (pakfire_build_has_flag(build, PAKFIRE_BUILD_LOCAL)) {
+ r = pakfire_build_setup_local_repo(build);
+ if (r < 0)
+ return r;
+ }
+
// Create a new repository
r = pakfire_repo_create(&build->repo, build->pakfire, PAKFIRE_REPO_RESULT);
if (r) {