From: Michael Tremer Date: Fri, 20 Oct 2023 14:04:05 +0000 (+0000) Subject: buildservice: Implement deleting repositories X-Git-Tag: 0.9.30~1405 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0948a9b6166b348f5ac83ed35d17830680546fe7;p=pakfire.git buildservice: Implement deleting repositories Signed-off-by: Michael Tremer --- diff --git a/Makefile.am b/Makefile.am index 172024648..ed71e64e8 100644 --- a/Makefile.am +++ b/Makefile.am @@ -499,6 +499,8 @@ libcli_la_SOURCES = \ src/cli/lib/repo_compose.h \ src/cli/lib/repo_create.c \ src/cli/lib/repo_create.h \ + src/cli/lib/repo_delete.c \ + src/cli/lib/repo_delete.h \ src/cli/lib/repo_list.c \ src/cli/lib/repo_list.h \ src/cli/lib/repo_show.c \ diff --git a/src/cli/lib/repo.c b/src/cli/lib/repo.c index 3c38ae4ab..bf37a8322 100644 --- a/src/cli/lib/repo.c +++ b/src/cli/lib/repo.c @@ -22,6 +22,7 @@ #include "repo.h" #include "repo_compose.h" #include "repo_create.h" +#include "repo_delete.h" #include "repo_list.h" #include "repo_show.h" @@ -37,6 +38,7 @@ int cli_repo(void* data, int argc, char* argv[]) { int cli_repo_client(void* data, int argc, char* argv[]) { static const struct command commands[] = { { "create", cli_repo_create, 2, -1, 0 }, + { "delete", cli_repo_delete, 2, 2, 0 }, { "list", cli_repo_list, 1, 1, 0 }, { "show", cli_repo_show, 2, 2, 0 }, { NULL }, diff --git a/src/libpakfire/buildservice.c b/src/libpakfire/buildservice.c index b8a4b7000..0ebb50911 100644 --- a/src/libpakfire/buildservice.c +++ b/src/libpakfire/buildservice.c @@ -910,3 +910,60 @@ ERROR: return r; } + +PAKFIRE_EXPORT int pakfire_buildservice_delete_repo(struct pakfire_buildservice* service, + const char* distro, const char* name) { + struct pakfire_transfer* transfer = NULL; + struct json_object* response = NULL; + char* buffer = NULL; + size_t length = 0; + char url[PATH_MAX]; + int r; + + // Compose the URL + r = pakfire_string_format(url, "/api/v1/repos/%s/%s", distro, name); + if (r) + goto ERROR; + + // Create a new transfer + r = pakfire_buildservice_create_transfer(&transfer, service, url); + if (r) + goto ERROR; + + // Ask to DELETE + r = pakfire_downloader_transfer_set_method(transfer, PAKFIRE_METHOD_DELETE); + if (r) + goto ERROR; + + // Enable authentication + r = pakfire_downloader_transfer_auth(transfer); + if (r) + goto ERROR; + + // Write the response to the buffer + r = pakfire_downloader_transfer_set_output_buffer(transfer, &buffer, &length); + if (r) + goto ERROR; + + // Run the transfer + r = pakfire_downloader_transfer_run(transfer, PAKFIRE_TRANSFER_NO_PROGRESS); + if (r) + goto ERROR; + + // Parse the response + r = pakfire_buildservice_parse_response(service, transfer, buffer, length, &response); + if (r) { + CTX_ERROR(service->ctx, "Could not parse the response: %s\n", strerror(-r)); + goto ERROR; + } + +ERROR: + if (transfer) + pakfire_downloader_transfer_unref(transfer); + if (response) + json_object_put(response); + if (buffer) + free(buffer); + + return r; +} diff --git a/src/libpakfire/include/pakfire/buildservice.h b/src/libpakfire/include/pakfire/buildservice.h index 245de5323..6fd6746d0 100644 --- a/src/libpakfire/include/pakfire/buildservice.h +++ b/src/libpakfire/include/pakfire/buildservice.h @@ -58,5 +58,7 @@ int pakfire_buildservice_get_repo(struct pakfire_buildservice* service, const char* distro, const char* name, struct json_object** repo); int pakfire_buildservice_create_repo(struct pakfire_buildservice* service, const char* distro, const char* name, const char* description, struct json_object** repo); +int pakfire_buildservice_delete_repo(struct pakfire_buildservice* service, + const char* distro, const char* name); #endif /* PAKFIRE_BUILDSERVICE_H */