Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP1:GA
PackageKit.2392
PackageKit-zypp-filter-uninstalled-packages.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File PackageKit-zypp-filter-uninstalled-packages.patch of Package PackageKit.2392
diff --git a/backends/zypp/pk-backend-zypp.cpp b/backends/zypp/pk-backend-zypp.cpp index 6a06f07..8794536 100644 --- a/backends/zypp/pk-backend-zypp.cpp +++ b/backends/zypp/pk-backend-zypp.cpp @@ -3466,6 +3466,7 @@ backend_what_provides_thread (PkBackendJob *job, GVariant *params, gpointer user gchar **search = pk_backend_what_provides_decompose (job, provides, values); + GHashTable *installed_hash = g_hash_table_new (g_str_hash, g_str_equal); guint len = g_strv_length (search); for (guint i=0; i<len; i++) { @@ -3474,13 +3475,28 @@ backend_what_provides_thread (PkBackendJob *job, GVariant *params, gpointer user sat::WhatProvides prov (cap); for (sat::WhatProvides::const_iterator it = prov.begin (); it != prov.end (); ++it) { + if (it->isSystem ()) + g_hash_table_insert (installed_hash, + (const gpointer) make<ResObject>(*it)->summary().c_str (), + GUINT_TO_POINTER (1)); + } + + for (sat::WhatProvides::const_iterator it = prov.begin (); it != prov.end (); ++it) { if (zypp_filter_solvable (_filters, *it)) continue; - + + /* If caller asked for uninstalled packages, filter out uninstalled instances from + * remote repos corresponding to locally installed packages */ + if ((_filters & pk_bitfield_value (PK_FILTER_ENUM_NOT_INSTALLED)) && + g_hash_table_contains (installed_hash, make<ResObject>(*it)->summary().c_str ())) + continue; + PkInfoEnum info = it->isSystem () ? PK_INFO_ENUM_INSTALLED : PK_INFO_ENUM_AVAILABLE; zypp_backend_package (job, info, *it, make<ResObject>(*it)->summary().c_str ()); } } + + g_hash_table_unref (installed_hash); } pk_backend_job_finished (job); }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor