diff -r 94d7459828ba -r 008c75a5e08d src/main.c --- a/src/main.c Thu Nov 13 10:44:53 2014 +0000 +++ b/src/main.c Mon Jul 04 10:48:18 2016 +0100 @@ -1,7 +1,7 @@ /* * Copyright (C) 2008 Kristian Høgsberg * Copyright (C) 2008 Red Hat, Inc - * Copyright (C) 2009, 2011-2012, 2014 J. Ali Harlow + * Copyright (C) 2009, 2011-2012, 2014, 2016 J. Ali Harlow * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -49,7 +49,7 @@ static const char system_repo_filename[] = "system.rzdb"; static const char next_repo_filename[] = "system-next.rzdb"; -static const char rawhide_repo_filename[] = "rawhide.rzdb"; +static const char rawhide_repo_uri[] = "file:rawhide.rzdb"; static const char *install_root = ""; static const char *repo_filename = system_repo_filename; static const char *yum_url; @@ -150,7 +150,7 @@ opterr = 0; - opt = getopt_long(argc, argv, "+", longopts, NULL); + opt = getopt_long(argc, (char **)argv, "+", longopts, NULL); switch (opt) { @@ -621,13 +621,13 @@ FILE *wfp, *rfp; char buffer[256], *ptr, *local; size_t nb, n; + struct razor_error *error = NULL; - local = razor_path_from_url(url); + local = razor_path_from_uri(url, &error); if (local == NULL) { - fprintf(stderr, - "%s: download manually (curl not available)\n", - file); + fprintf(stderr, "%s: %s\n", file, razor_error_get_msg(error)); + razor_error_free(error); return -1; } else { rfp = fopen(local, "rb"); @@ -723,24 +723,12 @@ curl_easy_setopt(curl, CURLOPT_URL, url); res = curl_easy_perform(curl); fclose(fp); + putc('\n', stderr); if (res != CURLE_OK) { fprintf(stderr, "curl error: %s\n", error); unlink(file); return -1; } - res = curl_easy_getinfo(curl, - CURLINFO_RESPONSE_CODE, &response); - if (res != CURLE_OK) { - fprintf(stderr, "curl error: %s\n", error); - unlink(file); - return -1; - } - if (response != 200) { - fprintf(stderr, " - failed %ld\n", response); - unlink(file); - return -1; - } - fprintf(stderr, "\n"); curl_easy_cleanup(curl); return 0; @@ -799,13 +787,13 @@ if (set == NULL) return 1; atomic = razor_atomic_open("Yum import repository"); - razor_set_write(set, atomic, rawhide_repo_filename, RAZOR_SECTION_ALL); + razor_set_write(set, atomic, rawhide_repo_uri, RAZOR_SECTION_ALL); retval = razor_atomic_commit(atomic); razor_set_unref(set); if (retval) fprintf(stderr, "%s\n", razor_atomic_get_error_msg(atomic)); else - printf("wrote %s\n", rawhide_repo_filename); + printf("wrote %s\n", rawhide_repo_uri); razor_atomic_destroy(atomic); return retval; @@ -994,7 +982,7 @@ set = razor_root_open_read_only(install_root, &error); if (set) - updated = razor_set_open(rawhide_repo_filename, 0, &error); + updated = razor_set_open(rawhide_repo_uri, 0, &error); else updated = NULL; if (updated == NULL) { @@ -1131,7 +1119,9 @@ RAZOR_DETAIL_LAST); s = rpm_filename(name, version, arch); - url = razor_concat(yum_url, "/Packages/", s, NULL); + file = razor_concat("Packages/", s, NULL); + url = razor_path_relative_to_uri(yum_url, file, NULL); + free(file); file = razor_concat("rpms/", s, NULL); free(s); if (download_if_missing(url, file) < 0) @@ -1166,7 +1156,7 @@ const char *preunprog, *preun, *postunprog, *postun; const char *install_prefix; const char *const *prefixes; - char *file, *s; + char *file, *s, *uri, *filename; uint32_t flags; importer = razor_importer_create(); @@ -1185,14 +1175,20 @@ RAZOR_DETAIL_POSTUNPROG, &postunprog, RAZOR_DETAIL_POSTUN, &postun, RAZOR_DETAIL_LAST)) { - s = rpm_filename(name, version, arch); - file = razor_concat("rpms/", s, NULL); + filename = rpm_filename(name, version, arch); + s = razor_concat("Packages/", filename, NULL); + uri = razor_path_relative_to_uri(yum_url, s, NULL); free(s); - rpm = razor_rpm_open(file, &error); + file = razor_concat("rpms/", filename, NULL); + free(filename); + download_if_missing(uri, file); + free(uri); + uri = razor_path_to_uri(file); free(file); + rpm = razor_rpm_open(uri, &error); + free(uri); if (rpm == NULL) { razor_atomic_propagate_error(atomic, error, NULL); - razor_error_free(error); razor_package_iterator_destroy(pkg_iter); razor_importer_destroy(importer); return NULL; @@ -1249,7 +1245,7 @@ { int retval; const char *name, *version, *arch; - char *file, *s; + char *file, *s, *uri; struct razor_rpm *rpm; struct razor_error *error=NULL; @@ -1265,12 +1261,13 @@ s = rpm_filename(name, version, arch); file = razor_concat("rpms/", s, NULL); free(s); - rpm = razor_rpm_open(file, &error); + uri = razor_path_to_uri(file); free(file); + rpm = razor_rpm_open(uri, &error); + free(uri); if (rpm == NULL) { razor_atomic_propagate_error(atomic, error, NULL); fprintf(stderr, "%s\n", razor_error_get_msg(error)); - razor_error_free(error); return -1; } if (relocations) @@ -1441,7 +1438,7 @@ } } while (opt); - upstream = razor_set_open(rawhide_repo_filename, 0, &error); + upstream = razor_set_open(rawhide_repo_uri, 0, &error); if (upstream == NULL) { fprintf(stderr, "%s\n", razor_error_get_msg(error)); razor_error_free(error); @@ -1513,7 +1510,7 @@ } } - if (razor_atomic_create_dir(atomic, "rpms", + if (razor_atomic_create_dir(atomic, "file:rpms", S_IRWXU | S_IRWXG | S_IRWXO) || razor_atomic_commit(atomic)) { fprintf(stderr, "%s\n", razor_atomic_get_error_msg(atomic)); @@ -1604,7 +1601,7 @@ struct razor_package_iterator *pi; struct razor_package *package; const char *pattern, *name, *version, *arch; - char url[256], file[256]; + char *url, *file, *s, filename[256]; int matches = 0; switch (razor_getopt(argc, argv, 0, NULL, "[pattern]", NULL)) { @@ -1621,7 +1618,7 @@ pattern = argv[optind]; - set = razor_set_open(rawhide_repo_filename, 0, &error); + set = razor_set_open(rawhide_repo_uri, 0, &error); if (set == NULL) { fprintf(stderr, "%s\n", razor_error_get_msg(error)); razor_error_free(error); @@ -1630,7 +1627,7 @@ atomic = razor_atomic_open("Download packages"); - if (razor_atomic_create_dir(atomic, "rpms", + if (razor_atomic_create_dir(atomic, "file:rpms", S_IRWXU | S_IRWXG | S_IRWXO)) { fprintf(stderr, "%s\n", razor_atomic_get_error_msg(atomic)); razor_atomic_destroy(atomic); @@ -1654,12 +1651,15 @@ continue; matches++; - snprintf(url, sizeof url, - "%s/Packages/%s-%s.%s.rpm", - yum_url, name, version, arch); - snprintf(file, sizeof file, - "rpms/%s-%s.%s.rpm", name, version, arch); + snprintf(filename, sizeof filename, + "%s-%s.%s.rpm", name, version, arch); + s = razor_concat("Packages/", filename, NULL); + url = razor_path_relative_to_uri(yum_url, s, NULL); + free(s); + file = razor_concat("rpms/", filename, NULL); download_if_missing(url, file); + free(url); + free(file); } razor_package_iterator_destroy(pi); razor_set_unref(set); @@ -1804,7 +1804,7 @@ snprintf(pattern, sizeof pattern, "*%s*", argv[1]); - set = razor_set_open(rawhide_repo_filename, 0, &error); + set = razor_set_open(rawhide_repo_uri, 0, &error); if (set == NULL) { fprintf(stderr, "%s\n", razor_error_get_msg(error)); razor_error_free(error); @@ -1939,7 +1939,7 @@ while ((opt = getopt_long(argc, argv, "+", options, NULL)) != -1) { switch (opt) { case opt_database: - razor_set_database_path(optarg); + razor_set_database_uri(optarg); break; case opt_help: default: @@ -1949,12 +1949,12 @@ printf(" --help " "Show this help message and exit\n"); printf(" --help-commands List commands\n"); - printf(" --database=PATH " + printf(" --database=URI " "Use alternative database\n"); - printf(" --root=ROOT " - "Use ROOT as top level directory\n"); - printf(" --url=URL " - "Use URL as upstream repository\n"); + printf(" --root=URI " + "Use URI as top level directory\n"); + printf(" --url=URI " + "Use URI as upstream repository\n"); return opt != opt_help; case opt_root: install_root = optarg;