#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"
}
+ 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");
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, 0);
- 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, 0);
- 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 */
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) {
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))
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;
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);
}
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)
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);
}
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;
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;
}
for (i=0; i<argc; i++) {
for (a=0; a<available->len; 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) {
for (j=0; j<available_pkgs->len; 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 +
((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");
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);
}
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},
{"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},