Match providers when showing optdep install status

Use alpm_find_satisfier() instead of alpm_db_get_pkg() when retrieving
the install status of a package to make sure we spot providers as well.

Fixes FS#36412

Signed-off-by: Lukas Fleischer <lfleischer@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
Lukas Fleischer 2015-05-20 13:10:32 +02:00 committed by Allan McRae
parent 4b0bc2cf97
commit a187fa4562
2 changed files with 4 additions and 2 deletions

View File

@ -57,11 +57,12 @@ static void deplist_display(const char *title,
static void optdeplist_display(alpm_pkg_t *pkg, unsigned short cols)
{
alpm_list_t *i, *text = NULL;
alpm_db_t *localdb = alpm_get_localdb(config->handle);
for(i = alpm_pkg_get_optdepends(pkg); i; i = alpm_list_next(i)) {
alpm_depend_t *optdep = i->data;
char *depstring = alpm_dep_compute_string(optdep);
if(alpm_pkg_get_origin(pkg) == ALPM_PKG_FROM_LOCALDB) {
if(alpm_db_get_pkg(alpm_get_localdb(config->handle), optdep->name)) {
if(alpm_find_satisfier(alpm_db_get_pkgcache(localdb), optdep->name)) {
const char *installed = _(" [installed]");
depstring = realloc(depstring, strlen(depstring) + strlen(installed) + 1);
strcpy(depstring + strlen(depstring), installed);

View File

@ -1204,9 +1204,10 @@ static int depend_cmp(const void *d1, const void *d2)
static char *make_optstring(alpm_depend_t *optdep)
{
alpm_db_t *localdb = alpm_get_localdb(config->handle);
char *optstring = alpm_dep_compute_string(optdep);
char *status = NULL;
if(alpm_db_get_pkg(alpm_get_localdb(config->handle), optdep->name)) {
if(alpm_find_satisfier(alpm_db_get_pkgcache(localdb), optdep->name)) {
status = _(" [installed]");
} else if(alpm_pkg_find(alpm_trans_get_add(config->handle), optdep->name)) {
status = _(" [pending]");