pkg_hash: remove unused variable in pkg_hash_load_feeds()
[oweals/opkg-lede.git] / libopkg / pkg_hash.c
index 99d8958da16bfeb692afbf626b5672e4fe99a8ec..8bb160fb88c86bf2f1cd5b0a82f6bf1d277d8e84 100644 (file)
@@ -142,6 +142,13 @@ pkg_hash_add_from_file(const char *file_name,
                        continue;
                }
 
+               if (!(pkg->state_flag & SF_NEED_DETAIL)) {
+                       //opkg_msg(DEBUG, "Package %s is unrelated, ignoring.\n", pkg->name);
+                       pkg_deinit(pkg);
+                       free(pkg);
+                       continue;
+               }
+
                if (!pkg_get_architecture(pkg) || !pkg_get_arch_priority(pkg)) {
                        char *version_str = pkg_version_str_alloc(pkg);
                        opkg_msg(NOTICE, "Package %s version %s has no "
@@ -170,7 +177,7 @@ pkg_hash_add_from_file(const char *file_name,
 int pkg_hash_load_feeds(int state_flags)
 {
        pkg_src_list_elt_t *iter;
-       pkg_src_t *src, *subdist;
+       pkg_src_t *src;
        char *list_file, *lists_dir;
 
        opkg_msg(INFO, "\n");
@@ -222,6 +229,46 @@ int pkg_hash_load_status_files(void)
        return 0;
 }
 
+static void
+pkg_hash_load_package_details_helper(const char *pkg_name, void *entry, void *data)
+{
+       int *count = data;
+       abstract_pkg_t *ab_pkg = (abstract_pkg_t *) entry;
+
+       if (ab_pkg->state_flag & SF_NEED_DETAIL) {
+               if (ab_pkg->state_flag & SF_MARKED) {
+                       opkg_msg(DEBUG, "skipping already seen flagged abpkg %s\n",
+                                ab_pkg->name);
+                       return;
+               }
+
+               opkg_msg(DEBUG, "found yet incomplete flagged abpkg %s\n",
+                        ab_pkg->name);
+
+               (*count)++;
+               ab_pkg->state_flag |= SF_MARKED;
+       }
+}
+
+int pkg_hash_load_package_details(void)
+{
+       int n_need_detail;
+
+       while (1) {
+               pkg_hash_load_feeds(0);
+
+               n_need_detail = 0;
+               hash_table_foreach(&conf->pkg_hash, pkg_hash_load_package_details_helper, &n_need_detail);
+
+               if (n_need_detail > 0)
+                       opkg_msg(DEBUG, "Found %d packages requiring details, reloading feeds\n", n_need_detail);
+               else
+                       break;
+       }
+
+       return 0;
+}
+
 pkg_t *pkg_hash_fetch_best_installation_candidate(abstract_pkg_t * apkg,
                                                  int (*constraint_fcn) (pkg_t *
                                                                         pkg,