libmp/examples/client/install.c

84 lines
2.2 KiB
C

#include "../../include/all.h"
#include "./common.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
lm_ctx_resolve_list_t *list = NULL;
lm_pkg_t *pkg = NULL, *cur = NULL;
lm_ctx_t ctx;
int ret = EXIT_FAILURE;
if (argc != 4) {
printf("usage: %s <package name> <pool name> <pool url>\n", argv[0]);
return ret;
}
if (!mkdir_ifnot(ROOT_DIR)) {
printf("failed to create root dir: %s\n", ROOT_DIR);
return ret;
}
lm_ctx_init(&ctx);
if (!lm_ctx_set_data(&ctx, DATA_DIR)) {
printf("failed to set data dir: %s (%d)\n", lm_strerror(), lm_error());
goto end;
}
if (!lm_ctx_set_temp(&ctx, TEMP_DIR)) {
printf("failed to set temp dir: %s (%d)\n", lm_strerror(), lm_error());
goto end;
}
if (!lm_ctx_set_root(&ctx, ROOT_DIR)) {
printf("failed to set root dir: %s (%d)\n", lm_strerror(), lm_error());
goto end;
}
if (lm_ctx_pool_add(&ctx, argv[2], argv[3]) == NULL) {
printf("failed to add pool: %s (%d)\n", lm_strerror(), lm_error());
goto end;
}
lm_ctx_ping(&ctx, NULL, NULL);
lm_ctx_sync(&ctx, true, NULL, NULL);
if ((pkg = lm_ctx_pool_find(&ctx, argv[1], NULL)) == NULL) {
printf("failed to find package: %s (%d)\n", lm_strerror(), lm_error());
goto end;
}
printf("resolving package: %s (%s)...\n", pkg->name, pkg->version);
if ((list = lm_ctx_resolve(&ctx, pkg, NULL)) == NULL) {
printf("failed to resolve package: %s (%d)\n", lm_strerror(), lm_error());
goto end;
}
while ((cur = lm_ctx_resolve_next(list)) != NULL) {
printf("downloading package: %s (%s)...\n", cur->name, cur->version);
if (!lm_ctx_download(&ctx, cur, NULL, NULL)) {
printf("failed to download package: %s (%d)\n", lm_strerror(), lm_error());
goto end;
}
}
while ((cur = lm_ctx_resolve_next(list)) != NULL) {
printf("installing package: %s (%s)...\n", cur->name, cur->version);
if (!lm_ctx_install(&ctx, cur, NULL, NULL)) {
printf("failed to install the package: %s (%d)\n", lm_strerror(), lm_error());
goto end;
}
}
ret = EXIT_SUCCESS;
end:
lm_ctx_resolve_free(list);
lm_ctx_free(&ctx);
return ret;
}