X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=libopkg%2Fopkg_cmd.c;h=d1e91cbeae54bfdad58b0dfcedfcb63f79d0e065;hb=88772de23af57eac5c19670fde72d8e905109088;hp=29ae0cdcdafd06e6aaae14ae805f80006a763b22;hpb=a51633c1d32fdf46957a155d1744d6f30fb47420;p=oweals%2Fopkg-lede.git diff --git a/libopkg/opkg_cmd.c b/libopkg/opkg_cmd.c index 29ae0cd..d1e91cb 100644 --- a/libopkg/opkg_cmd.c +++ b/libopkg/opkg_cmd.c @@ -27,6 +27,7 @@ #include "opkg_conf.h" #include "opkg_cmd.h" #include "opkg_message.h" +#include "release.h" #include "pkg.h" #include "pkg_dest.h" #include "pkg_parse.h" @@ -113,11 +114,47 @@ opkg_update_cmd(int argc, char **argv) } + for (iter = void_list_first(&conf->dist_src_list); iter; iter = void_list_next(&conf->dist_src_list, iter)) { + char *url, *list_file_name; + + src = (pkg_src_t *)iter->data; + + sprintf_alloc(&url, "%s/dists/%s/Release", src->value, src->name); + + sprintf_alloc(&list_file_name, "%s/%s", lists_dir, src->name); + err = opkg_download(url, list_file_name, NULL, NULL, 0); + if (!err) { + opkg_msg(NOTICE, "Downloaded release files for dist %s.\n", + src->name); + release_t *release = release_new(); + err = release_init_from_file(release, list_file_name); + if (!err) { + if (!release_comps_supported(release, src->extra_data)) + err = -1; + } + if (!err) { + err = release_download(release, src, lists_dir, tmp); + } + release_deinit(release); + if (err) + unlink(list_file_name); + } + + if (err) + failures++; + + free(list_file_name); + free(url); + } + for (iter = void_list_first(&conf->pkg_src_list); iter; iter = void_list_next(&conf->pkg_src_list, iter)) { char *url, *list_file_name; src = (pkg_src_t *)iter->data; + if (src->extra_data && strcmp(src->extra_data, "__dummy__ ")) + continue; + if (src->extra_data) /* debian style? */ sprintf_alloc(&url, "%s/%s/%s", src->value, src->extra_data, src->gzip ? "Packages.gz" : "Packages"); @@ -125,30 +162,7 @@ opkg_update_cmd(int argc, char **argv) sprintf_alloc(&url, "%s/%s", src->value, src->gzip ? "Packages.gz" : "Packages"); sprintf_alloc(&list_file_name, "%s/%s", lists_dir, src->name); - if (src->gzip) { - char *tmp_file_name; - FILE *in, *out; - - sprintf_alloc (&tmp_file_name, "%s/%s.gz", tmp, src->name); - err = opkg_download(url, tmp_file_name, NULL, NULL); - if (err == 0) { - opkg_msg(NOTICE, "Inflating %s.\n", url); - in = fopen (tmp_file_name, "r"); - out = fopen (list_file_name, "w"); - if (in && out) - unzip (in, out); - else - err = 1; - if (in) - fclose (in); - if (out) - fclose (out); - unlink (tmp_file_name); - } - free(tmp_file_name); - } else - err = opkg_download(url, list_file_name, NULL, NULL); - if (err) { + if (opkg_download(url, list_file_name, NULL, NULL, 0)) { failures++; } else { opkg_msg(NOTICE, "Updated list of available packages in %s.\n", @@ -171,7 +185,7 @@ opkg_update_cmd(int argc, char **argv) /* Put the signature in the right place */ sprintf_alloc (&tmp_file_name, "%s/%s.sig", lists_dir, src->name); - err = opkg_download(url, tmp_file_name, NULL, NULL); + err = opkg_download(url, tmp_file_name, NULL, NULL, 0); if (err) { failures++; opkg_msg(NOTICE, "Signature check failed.\n"); @@ -182,6 +196,12 @@ opkg_update_cmd(int argc, char **argv) else opkg_msg(NOTICE, "Signature check failed.\n"); } + if (err) { + /* The signature was wrong so delete it */ + opkg_msg(NOTICE, "Remove wrong Signature file.\n"); + unlink (tmp_file_name); + unlink (list_file_name); + } /* We shouldn't unlink the signature ! */ // unlink (tmp_file_name); free (tmp_file_name); @@ -393,7 +413,7 @@ opkg_configure_packages(char *pkg_name) for(i = 0; i < ordered->len; i++) { pkg = ordered->pkgs[i]; - if (pkg_name && fnmatch(pkg_name, pkg->name, 0)) + if (pkg_name && fnmatch(pkg_name, pkg->name, conf->nocase)) continue; if (pkg->state_status == SS_UNPACKED) { @@ -508,18 +528,6 @@ opkg_upgrade_cmd(int argc, char **argv) err = -1; } } - } else { - pkg_vec_t *installed = pkg_vec_alloc(); - - pkg_info_preinstall_check(); - - pkg_hash_fetch_all_installed(installed); - for (i = 0; i < installed->len; i++) { - pkg = installed->pkgs[i]; - if (opkg_upgrade_pkg(pkg)) - err = -1; - } - pkg_vec_free(installed); } if (opkg_configure_packages(NULL)) @@ -563,7 +571,7 @@ opkg_download_cmd(int argc, char **argv) static int -opkg_list_cmd(int argc, char **argv) +opkg_list_find_cmd(int argc, char **argv, int use_desc) { int i; pkg_vec_t *available; @@ -579,7 +587,8 @@ opkg_list_cmd(int argc, char **argv) for (i=0; i < available->len; i++) { pkg = available->pkgs[i]; /* if we have package name or pattern and pkg does not match, then skip it */ - if (pkg_name && fnmatch(pkg_name, pkg->name, 0)) + if (pkg_name && fnmatch(pkg_name, pkg->name, conf->nocase) && + (!use_desc || !pkg->description || fnmatch(pkg_name, pkg->description, conf->nocase))) continue; print_pkg(pkg); } @@ -588,6 +597,18 @@ opkg_list_cmd(int argc, char **argv) return 0; } +static int +opkg_list_cmd(int argc, char **argv) +{ + return opkg_list_find_cmd(argc, argv, 0); +} + +static int +opkg_find_cmd(int argc, char **argv) +{ + return opkg_list_find_cmd(argc, argv, 1); +} + static int opkg_list_installed_cmd(int argc, char **argv) @@ -606,7 +627,7 @@ opkg_list_installed_cmd(int argc, char **argv) for (i=0; i < available->len; i++) { pkg = available->pkgs[i]; /* if we have package name or pattern and pkg does not match, then skip it */ - if (pkg_name && fnmatch(pkg_name, pkg->name, 0)) + if (pkg_name && fnmatch(pkg_name, pkg->name, conf->nocase)) continue; print_pkg(pkg); } @@ -635,7 +656,7 @@ opkg_list_changed_conffiles_cmd(int argc, char **argv) for (i=0; i < available->len; i++) { pkg = available->pkgs[i]; /* if we have package name or pattern and pkg does not match, then skip it */ - if (pkg_name && fnmatch(pkg_name, pkg->name, 0)) + if (pkg_name && fnmatch(pkg_name, pkg->name, conf->nocase)) continue; if (nv_pair_list_empty(&pkg->conffiles)) continue; @@ -691,7 +712,7 @@ opkg_info_status_cmd(int argc, char **argv, int installed_only) for (i=0; i < available->len; i++) { pkg = available->pkgs[i]; - if (pkg_name && fnmatch(pkg_name, pkg->name, 0)) { + if (pkg_name && fnmatch(pkg_name, pkg->name, conf->nocase)) { continue; } @@ -761,7 +782,7 @@ opkg_remove_cmd(int argc, char **argv) for (i=0; ilen; a++) { pkg = available->pkgs[a]; - if (fnmatch(argv[i], pkg->name, 0)) { + if (fnmatch(argv[i], pkg->name, conf->nocase)) { continue; } if (conf->restrict_to_default_dest) { @@ -895,7 +916,7 @@ opkg_depends_cmd(int argc, char **argv) for (j=0; jlen; j++) { pkg = available_pkgs->pkgs[j]; - if (fnmatch(argv[i], pkg->name, 0) != 0) + if (fnmatch(argv[i], pkg->name, conf->nocase) != 0) continue; depends_count = pkg->depends_count + @@ -1116,9 +1137,9 @@ opkg_what_provides_replaces_cmd(enum what_field_type what_field_type, int argc, ((what_field_type == WHATPROVIDES) ? pkg->provides[k] : pkg->replaces[k]); - if (fnmatch(target, apkg->name, 0) == 0) { + if (fnmatch(target, apkg->name, conf->nocase) == 0) { opkg_msg(NOTICE, " %s", pkg->name); - if (strcmp(target, apkg->name) != 0) + if ((conf->nocase ? strcasecmp(target, apkg->name) : strcmp(target, apkg->name)) != 0) opkg_msg(NOTICE, "\t%s %s\n", rel_str, apkg->name); opkg_message(NOTICE, "\n"); @@ -1169,7 +1190,7 @@ opkg_search_cmd(int argc, char **argv) for (iter = str_list_first(installed_files); iter; iter = str_list_next(installed_files, iter)) { installed_file = (char *)iter->data; - if (fnmatch(argv[0], installed_file, 0)==0) + if (fnmatch(argv[0], installed_file, conf->nocase)==0) print_pkg(pkg); } @@ -1215,7 +1236,7 @@ opkg_print_architecture_cmd(int argc, char **argv) array for easier maintenance */ static opkg_cmd_t cmds[] = { {"update", 0, (opkg_cmd_fun_t)opkg_update_cmd, PFM_DESCRIPTION|PFM_SOURCE}, - {"upgrade", 0, (opkg_cmd_fun_t)opkg_upgrade_cmd, PFM_DESCRIPTION|PFM_SOURCE}, + {"upgrade", 1, (opkg_cmd_fun_t)opkg_upgrade_cmd, PFM_DESCRIPTION|PFM_SOURCE}, {"list", 0, (opkg_cmd_fun_t)opkg_list_cmd, PFM_SOURCE}, {"list_installed", 0, (opkg_cmd_fun_t)opkg_list_installed_cmd, PFM_SOURCE}, {"list-installed", 0, (opkg_cmd_fun_t)opkg_list_installed_cmd, PFM_SOURCE}, @@ -1231,6 +1252,7 @@ static opkg_cmd_t cmds[] = { {"configure", 0, (opkg_cmd_fun_t)opkg_configure_cmd, PFM_DESCRIPTION|PFM_SOURCE}, {"files", 1, (opkg_cmd_fun_t)opkg_files_cmd, PFM_DESCRIPTION|PFM_SOURCE}, {"search", 1, (opkg_cmd_fun_t)opkg_search_cmd, PFM_DESCRIPTION|PFM_SOURCE}, + {"find", 1, (opkg_cmd_fun_t)opkg_find_cmd, PFM_SOURCE}, {"download", 1, (opkg_cmd_fun_t)opkg_download_cmd, PFM_DESCRIPTION|PFM_SOURCE}, {"compare_versions", 1, (opkg_cmd_fun_t)opkg_compare_versions_cmd, PFM_DESCRIPTION|PFM_SOURCE}, {"compare-versions", 1, (opkg_cmd_fun_t)opkg_compare_versions_cmd, PFM_DESCRIPTION|PFM_SOURCE},