X-Git-Url: https://git.librecmc.org/?p=oweals%2Fopkg-lede.git;a=blobdiff_plain;f=libopkg%2Fopkg_cmd.c;h=c30e34dc226c8c397bc5c8bb9c33a5a85986dc30;hp=affa0f77e16144acb4244ecbc59caa7fd2c41901;hb=71f02a3eb65b2996957faf81c2e54196a35f3c59;hpb=0a4946b3e913a2affe5fd342aa88e2533d06356e diff --git a/libopkg/opkg_cmd.c b/libopkg/opkg_cmd.c index affa0f7..c30e34d 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,37 +162,14 @@ 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", list_file_name); } free(url); -#if defined(HAVE_GPGME) || defined(HAVE_OPENSSL) +#if defined(HAVE_GPGME) || defined(HAVE_OPENSSL) || defined(HAVE_USIGN) if (conf->check_signature) { /* download detached signitures to verify the package lists */ /* get the url for the sig file */ @@ -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); } @@ -616,6 +637,39 @@ opkg_list_installed_cmd(int argc, char **argv) return 0; } +static int +opkg_list_changed_conffiles_cmd(int argc, char **argv) +{ + int i ; + pkg_vec_t *available; + pkg_t *pkg; + char *pkg_name = NULL; + conffile_list_elt_t *iter; + conffile_t *cf; + + if (argc > 0) { + pkg_name = argv[0]; + } + available = pkg_vec_alloc(); + pkg_hash_fetch_all_installed(available); + pkg_vec_sort(available, pkg_compare_names); + 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, conf->nocase)) + continue; + if (nv_pair_list_empty(&pkg->conffiles)) + continue; + for (iter = nv_pair_list_first(&pkg->conffiles); iter; iter = nv_pair_list_next(&pkg->conffiles, iter)) { + cf = (conffile_t *)iter->data; + if (cf->name && cf->value && conffile_has_been_modified(cf)) + printf("%s\n", cf->name); + } + } + pkg_vec_free(available); + return 0; +} + static int opkg_list_upgradable_cmd(int argc, char **argv) { @@ -658,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; } @@ -728,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) { @@ -862,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 + @@ -1009,7 +1063,7 @@ opkg_what_depends_conflicts_cmd(enum depend_type what_field_type, int recursive, if (!pkg_dependence_satisfiable(possibility)) opkg_msg(NOTICE, " unsatisfiable"); - opkg_msg(NOTICE, "\n"); + opkg_message(NOTICE, "\n"); goto next_package; } } @@ -1083,12 +1137,12 @@ 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_msg(NOTICE, "\n"); + opkg_message(NOTICE, "\n"); } } } @@ -1136,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); } @@ -1182,12 +1236,14 @@ 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}, {"list_upgradable", 0, (opkg_cmd_fun_t)opkg_list_upgradable_cmd, PFM_SOURCE}, {"list-upgradable", 0, (opkg_cmd_fun_t)opkg_list_upgradable_cmd, PFM_SOURCE}, + {"list_changed_conffiles", 0, (opkg_cmd_fun_t)opkg_list_changed_conffiles_cmd, PFM_SOURCE}, + {"list-changed-conffiles", 0, (opkg_cmd_fun_t)opkg_list_changed_conffiles_cmd, PFM_SOURCE}, {"info", 0, (opkg_cmd_fun_t)opkg_info_cmd, 0}, {"flag", 1, (opkg_cmd_fun_t)opkg_flag_cmd, PFM_DESCRIPTION|PFM_SOURCE}, {"status", 0, (opkg_cmd_fun_t)opkg_status_cmd, PFM_DESCRIPTION|PFM_SOURCE}, @@ -1196,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},