diff --git a/plugins/packagekit/gs-plugin-packagekit.c b/plugins/packagekit/gs-plugin-packagekit.c index 9502c114f40820861d9897dfa5c03b6815b21a87..4151338ee66640b59e888d1a28acac99ec0b2ab6 100644 --- a/plugins/packagekit/gs-plugin-packagekit.c +++ b/plugins/packagekit/gs-plugin-packagekit.c @@ -3803,6 +3803,14 @@ download_schedule_cb (GObject *source_object, g_steal_pointer (&task)); } +static gboolean +update_system_filter_cb (PkPackage *package, + gpointer user_data) +{ + PkInfoEnum info = pk_package_get_info (package); + return info != PK_INFO_ENUM_OBSOLETING && info != PK_INFO_ENUM_REMOVING; +} + static void download_get_updates_cb (GObject *source_object, GAsyncResult *result, @@ -3831,6 +3839,10 @@ download_get_updates_cb (GObject *source_object, return; } + /* Include only packages which are not to be obsoleted nor removed, + because these can cause failure due to unmet dependencies. */ + pk_package_sack_remove_by_filter (sack, update_system_filter_cb, NULL); + package_ids = pk_package_sack_get_ids (sack); for (guint i = 0; i < gs_app_list_length (data->download_list); i++) { GsApp *app = gs_app_list_index (data->download_list, i);