From 400ae048918077c5e5554e0b5f7d52830e0f9ffb Mon Sep 17 00:00:00 2001 From: Richard Hughes Date: Mon, 24 Aug 2009 12:40:08 +0100 Subject: [PATCH] When we fall back to legacy methods for simulate, filter only the newest packages --- src/pk-transaction.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/pk-transaction.c b/src/pk-transaction.c index 316e37d84..6a80e632c 100644 --- a/src/pk-transaction.c +++ b/src/pk-transaction.c @@ -1218,6 +1218,7 @@ pk_transaction_set_running (PkTransaction *transaction) GError *error = NULL; PkBackendDesc *desc; PkStore *store; + PkBitfield filters; PkTransactionPrivate *priv = PK_TRANSACTION_GET_PRIVATE (transaction); g_return_val_if_fail (PK_IS_TRANSACTION (transaction), FALSE); g_return_val_if_fail (transaction->priv->tid != NULL, FALSE); @@ -1400,22 +1401,28 @@ pk_transaction_set_running (PkTransaction *transaction) else if (priv->role == PK_ROLE_ENUM_SIMULATE_INSTALL_FILES) desc->simulate_install_files (priv->backend, priv->cached_package_ids); else if (priv->role == PK_ROLE_ENUM_SIMULATE_INSTALL_PACKAGES) { + /* fallback to a method we do have */ if (desc->simulate_install_packages != NULL) { desc->simulate_install_packages (priv->backend, priv->cached_package_ids); } else { - desc->get_depends (priv->backend, PK_FILTER_ENUM_NOT_INSTALLED, priv->cached_package_ids, TRUE); + filters = pk_bitfield_from_enums (PK_FILTER_ENUM_NOT_INSTALLED, PK_FILTER_ENUM_NEWEST, -1); + desc->get_depends (priv->backend, filters, priv->cached_package_ids, TRUE); } } else if (priv->role == PK_ROLE_ENUM_SIMULATE_REMOVE_PACKAGES) { + /* fallback to a method we do have */ if (desc->simulate_remove_packages != NULL) { desc->simulate_remove_packages (priv->backend, priv->cached_package_ids); } else { - desc->get_requires (priv->backend, PK_FILTER_ENUM_INSTALLED, priv->cached_package_ids, TRUE); + filters = pk_bitfield_from_enums (PK_FILTER_ENUM_INSTALLED, PK_FILTER_ENUM_NEWEST, -1); + desc->get_requires (priv->backend, filters, priv->cached_package_ids, TRUE); } } else if (priv->role == PK_ROLE_ENUM_SIMULATE_UPDATE_PACKAGES) { + /* fallback to a method we do have */ if (desc->simulate_update_packages != NULL) { desc->simulate_update_packages (priv->backend, priv->cached_package_ids); } else { - desc->get_depends (priv->backend, PK_FILTER_ENUM_NOT_INSTALLED, priv->cached_package_ids, TRUE); + filters = pk_bitfield_from_enums (PK_FILTER_ENUM_NOT_INSTALLED, PK_FILTER_ENUM_NEWEST, -1); + desc->get_depends (priv->backend, filters, priv->cached_package_ids, TRUE); } } else { egg_error ("failed to run as role not assigned");