From: Michael Tremer Date: Fri, 27 Jun 2025 08:19:00 +0000 (+0000) Subject: client: Refactor creating repositories X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=602510909e5da88689dc439a6fdcf166e49ed4ff;p=pakfire.git client: Refactor creating repositories Signed-off-by: Michael Tremer --- diff --git a/src/cli/lib/repo_create.c b/src/cli/lib/repo_create.c index 1c7c84fe..cf91e295 100644 --- a/src/cli/lib/repo_create.c +++ b/src/cli/lib/repo_create.c @@ -73,11 +73,18 @@ static error_t parse(int key, char* arg, struct argp_state* state, void* data) { return 0; } +static int ready_callback(struct pakfire_client* client, void* data) { + const struct cli_local_args* local_args = data; + + // Create the repository + return pakfire_client_create_repo(client, + local_args->distro, local_args->name, local_args->description); +} + int cli_repo_create(void* data, int argc, char* argv[]) { struct cli_global_args* global_args = data; struct cli_local_args local_args = {}; struct pakfire_client* client = NULL; - struct json_object* repo = NULL; int r; // Parse the command line @@ -90,22 +97,15 @@ int cli_repo_create(void* data, int argc, char* argv[]) { if (r < 0) goto ERROR; - // List repos - r = pakfire_client_create_repo(client, local_args.distro, local_args.name, - local_args.description, &repo); - if (r) - goto ERROR; + // Set ready callback + pakfire_client_set_ready_callback(client, ready_callback, &local_args); - // Dump everything - r = cli_dump_json(repo); - if (r) - goto ERROR; + // Run the client + r = pakfire_client_run(client); ERROR: if (client) pakfire_client_unref(client); - if (repo) - json_object_put(repo); return r; } diff --git a/src/pakfire/client.c b/src/pakfire/client.c index 715a6bd5..17d267d2 100644 --- a/src/pakfire/client.c +++ b/src/pakfire/client.c @@ -1415,10 +1415,9 @@ ERROR: } int pakfire_client_create_repo(struct pakfire_client* self, - const char* distro, const char* name, const char* description, struct json_object** p) { + const char* distro, const char* name, const char* description) { struct pakfire_xfer* xfer = NULL; struct json_object* request = NULL; - struct json_object* response = NULL; int r; // Check inputs @@ -1427,12 +1426,12 @@ int pakfire_client_create_repo(struct pakfire_client* self, // Create a new xfer r = pakfire_client_xfer_create(&xfer, self, "/api/v1/repos/%s", distro); - if (r) + if (r < 0) goto ERROR; // Enable authentication r = pakfire_client_xfer_auth(self, xfer); - if (r) + if (r < 0) goto ERROR; // Create the request @@ -1442,32 +1441,33 @@ int pakfire_client_create_repo(struct pakfire_client* self, // Set name r = pakfire_json_add_string(request, "name", name); - if (r) + if (r < 0) goto ERROR; // Set description if (description) { r = pakfire_json_add_string(request, "description", description); - if (r) + if (r < 0) goto ERROR; } - // Send the request - r = pakfire_xfer_run_api_request(xfer, request, &response); - if (r) + // Set the request body + r = pakfire_xfer_set_json_payload(xfer, request); + if (r < 0) goto ERROR; - // Return the pointer - if (p) - *p = json_object_get(response); + // XXX This needs a callback + + // Enqueue the transfer + r = pakfire_httpclient_enqueue(self->httpclient, xfer); + if (r < 0) + goto ERROR; ERROR: if (xfer) pakfire_xfer_unref(xfer); if (request) json_object_put(request); - if (response) - json_object_put(response); return r; } diff --git a/src/pakfire/client.h b/src/pakfire/client.h index a977da2a..10d03e18 100644 --- a/src/pakfire/client.h +++ b/src/pakfire/client.h @@ -109,7 +109,7 @@ int pakfire_client_list_repos(struct pakfire_client* client, int pakfire_client_get_repo(struct pakfire_client* client, const char* distro, const char* name, struct json_object** repo); int pakfire_client_create_repo(struct pakfire_client* client, - const char* distro, const char* name, const char* description, struct json_object** repo); + const char* distro, const char* name, const char* description); int pakfire_client_delete_repo(struct pakfire_client* client, const char* distro, const char* name);