From 43f9dd8c4033269ff09283af26a9312b85b637c7 Mon Sep 17 00:00:00 2001 From: Richard Hughes Date: Thu, 16 Nov 2017 14:27:45 +0000 Subject: [PATCH] Sort the output of GetUpgrades correctly This allows clients to just select the 'first' FwupdRelease for the newest if there are multiple installable releases. Fixes https://github.com/hughsie/fwupd/issues/319 --- src/fu-engine.c | 4 ++-- src/fu-self-test.c | 15 +++++++++++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/fu-engine.c b/src/fu-engine.c index b4ab95b23..3d7d2dd93 100644 --- a/src/fu-engine.c +++ b/src/fu-engine.c @@ -2161,8 +2161,8 @@ fu_engine_sort_releases_cb (gconstpointer a, gconstpointer b) { FwupdRelease *rel_a = FWUPD_RELEASE (*((FwupdRelease **) a)); FwupdRelease *rel_b = FWUPD_RELEASE (*((FwupdRelease **) b)); - return as_utils_vercmp (fwupd_release_get_version (rel_a), - fwupd_release_get_version (rel_b)); + return as_utils_vercmp (fwupd_release_get_version (rel_b), + fwupd_release_get_version (rel_a)); } static GPtrArray * diff --git a/src/fu-self-test.c b/src/fu-self-test.c index 33ab40edd..dc0a3f688 100644 --- a/src/fu-self-test.c +++ b/src/fu-self-test.c @@ -213,6 +213,13 @@ fu_engine_func (void) " aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee" " " " " + " " + " 123" + " 456" + " https://test.org/foo.cab" + " deadbeefdeadbeefdeadbeefdeadbeef" + " deadbeefdeadbeefdeadbeefdeadbeef" + " " " " " 123" " 456" @@ -269,14 +276,18 @@ fu_engine_func (void) releases = fu_engine_get_releases (engine, fu_device_get_id (device), &error); g_assert_no_error (error); g_assert (releases != NULL); - g_assert_cmpint (releases->len, ==, 3); + g_assert_cmpint (releases->len, ==, 4); /* upgrades */ releases_up = fu_engine_get_upgrades (engine, fu_device_get_id (device), &error); g_assert_no_error (error); g_assert (releases_up != NULL); - g_assert_cmpint (releases_up->len, ==, 1); + g_assert_cmpint (releases_up->len, ==, 2); + + /* ensure the list is sorted */ rel = FWUPD_RELEASE (g_ptr_array_index (releases_up, 0)); + g_assert_cmpstr (fwupd_release_get_version (rel), ==, "1.2.5"); + rel = FWUPD_RELEASE (g_ptr_array_index (releases_up, 1)); g_assert_cmpstr (fwupd_release_get_version (rel), ==, "1.2.4"); /* downgrades */