From 871744d4c3437d0de1294343b0fe4202f2111def Mon Sep 17 00:00:00 2001 From: ticktock35 Date: Mon, 15 Dec 2008 05:14:04 +0000 Subject: [PATCH] opkg: implement opkg_list_upgradable_packages function git-svn-id: http://opkg.googlecode.com/svn/trunk@95 e8e0d7a0-c8d9-11dd-a880-a1081c7ac358 --- libopkg/opkg.c | 52 +++++++++++++++++++++++++++++++++++++++++++- libopkg/opkg.h | 3 ++- tests/libopkg_test.c | 17 +++++++++++---- 3 files changed, 66 insertions(+), 6 deletions(-) diff --git a/libopkg/opkg.c b/libopkg/opkg.c index b94ad55..209db6a 100644 --- a/libopkg/opkg.c +++ b/libopkg/opkg.c @@ -194,7 +194,7 @@ opkg_free (opkg_t *opkg) } int -opkg_read_config_files (opkg_t *opkg) +opkg_re_read_config_files (opkg_t *opkg) { args_t *a; opkg_conf_t *c; @@ -734,3 +734,53 @@ opkg_list_packages (opkg_t *opkg, opkg_package_callback_t callback, void *user_d return 0; } +int +opkg_list_upgradable_packages (opkg_t *opkg, opkg_package_callback_t callback, void *user_data) +{ + pkg_vec_t *all; + int i; + + opkg_assert (opkg); + opkg_assert (callback); + + all = pkg_vec_alloc (); + pkg_hash_fetch_available (&opkg->conf->pkg_hash, all); + for (i = 0; i < all->len; i++) + { + pkg_t *old, *new; + int cmp; + opkg_package_t *package; + + old = all->pkgs[i]; + + if (old->state_status != SS_INSTALLED) + continue; + + new = pkg_hash_fetch_best_installation_candidate_by_name(opkg->conf, old->name); + if (new == NULL) { + /* XXX: Notice: Assuming locally install package is up to date */ + continue; + } + + cmp = pkg_compare_versions(old, new); + + if (cmp < 0) + { + + package = opkg_package_new_with_values ( + old->name, + old->version, + old->architecture, + old->description, + old->tags, + (old->state_status == SS_INSTALLED)); + + callback (opkg, package, user_data); + } + } + + pkg_vec_free (all); + + return 0; +} + diff --git a/libopkg/opkg.h b/libopkg/opkg.h index a6decd5..4dda6c7 100644 --- a/libopkg/opkg.h +++ b/libopkg/opkg.h @@ -41,7 +41,7 @@ opkg_t* opkg_new (); void opkg_free (opkg_t *opkg); void opkg_get_option (opkg_t *opkg, char *option, void **value); void opkg_set_option (opkg_t *opkg, char *option, void *value); -int opkg_read_config_files (opkg_t *opkg); +int opkg_re_read_config_files (opkg_t *opkg); int opkg_install_package (opkg_t *opkg, const char *package_name, opkg_progress_callback_t callback, void *user_data); int opkg_remove_package (opkg_t *opkg, const char *package_name, opkg_progress_callback_t callback, void *user_data); @@ -50,3 +50,4 @@ int opkg_upgrade_all (opkg_t *opkg, opkg_progress_callback_t callback, void *use int opkg_update_package_lists (opkg_t *opkg, opkg_progress_callback_t callback, void *user_data); int opkg_list_packages (opkg_t *opkg, opkg_package_callback_t callback, void *user_data); +int opkg_list_upgradable_packages (opkg_t *opkg, opkg_package_callback_t callback, void *user_data); diff --git a/tests/libopkg_test.c b/tests/libopkg_test.c index ac61738..fe1cefd 100644 --- a/tests/libopkg_test.c +++ b/tests/libopkg_test.c @@ -26,6 +26,12 @@ package_list_callback (opkg_t *opkg, opkg_package_t *pkg, void *data) opkg_package_free (pkg); } +void +package_list_upgradable_callback (opkg_t *opkg, opkg_package_t *pkg, void *data) +{ + printf ("%s - %s\n", pkg->name, pkg->version); +} + int main (int argc, char **argv) { @@ -36,7 +42,7 @@ main (int argc, char **argv) opkg_set_option (opkg, "offline_root", "/tmp/"); - opkg_read_config_files (opkg); + opkg_re_read_config_files (opkg); err = opkg_update_package_lists (opkg, progress_callback, "Updating..."); printf ("\nopkg_update_package_lists returned %d\n", err); @@ -47,12 +53,15 @@ main (int argc, char **argv) err = opkg_upgrade_package (opkg, "aspell", progress_callback, "Upgrading..."); printf ("\nopkg_upgrade_package returned %d\n", err); - err = opkg_upgrade_all (opkg, progress_callback, "Upgrading all..."); - printf ("\nopkg_upgrade_package returned %d\n", err); - err = opkg_remove_package (opkg, "aspell", progress_callback, "Removing..."); printf ("\nopkg_remove_package returned %d\n", err); + printf ("Listing upgradable packages...\n"); + opkg_list_upgradable_packages (opkg, package_list_upgradable_callback, NULL); + + err = opkg_upgrade_all (opkg, progress_callback, "Upgrading all..."); + printf ("\nopkg_upgrade_all returned %d\n", err); + opkg_list_packages (opkg, package_list_callback, NULL); printf ("\n"); -- 2.25.1