From 00513823dc9e15c4de12c02f8faa4dd72ca4ee4e Mon Sep 17 00:00:00 2001 From: Olivier Brunel Date: Mon, 17 Jun 2013 10:46:38 +0200 Subject: Make --unrequired filter packages that are optdep as well Specify it twice to only filter direct dependencies. Signed-off-by: Olivier Brunel Signed-off-by: Allan McRae --- src/pacman/pacman.c | 5 +++-- src/pacman/query.c | 11 ++++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c index 7aa0271c..5ce8747b 100644 --- a/src/pacman/pacman.c +++ b/src/pacman/pacman.c @@ -146,7 +146,8 @@ static void usage(int op, const char * const myname) addlist(_(" -p, --file query a package file instead of the database\n")); addlist(_(" -q, --quiet show less information for query and search\n")); addlist(_(" -s, --search search locally-installed packages for matching strings\n")); - addlist(_(" -t, --unrequired list packages not required by any package [filter]\n")); + addlist(_(" -t, --unrequired list packages not (optionally) required by any\n" + " package (-tt to ignore optdepends) [filter]\n")); addlist(_(" -u, --upgrades list outdated packages [filter]\n")); } else if(op == PM_OP_SYNC) { printf("%s: %s {-S --sync} [%s] [%s]\n", str_usg, myname, str_opt, str_pkg); @@ -483,7 +484,7 @@ static int parsearg_query(int opt) case 'p': config->op_q_isfile = 1; break; case 'q': config->quiet = 1; break; case 's': config->op_q_search = 1; break; - case 't': config->op_q_unrequired = 1; break; + case 't': (config->op_q_unrequired)++; break; case 'u': config->op_q_upgrade = 1; break; default: return 1; } diff --git a/src/pacman/query.c b/src/pacman/query.c index f5862a2d..e88b393b 100644 --- a/src/pacman/query.c +++ b/src/pacman/query.c @@ -312,11 +312,16 @@ static unsigned short pkg_get_locality(alpm_pkg_t *pkg) return PKG_LOCALITY_FOREIGN; } -static int is_unrequired(alpm_pkg_t *pkg) +static int is_unrequired(alpm_pkg_t *pkg, unsigned short level) { alpm_list_t *requiredby = alpm_pkg_compute_requiredby(pkg); if(requiredby == NULL) { - return 1; + if(level == 1) { + requiredby = alpm_pkg_compute_optionalfor(pkg); + } + if(requiredby == NULL) { + return 1; + } } FREELIST(requiredby); return 0; @@ -339,7 +344,7 @@ static int filter(alpm_pkg_t *pkg) return 0; } /* check if this pkg is unrequired */ - if(config->op_q_unrequired && !is_unrequired(pkg)) { + if(config->op_q_unrequired && !is_unrequired(pkg, config->op_q_unrequired)) { return 0; } /* check if this pkg is outdated */ -- cgit v1.2.3-24-g4f1b