Passing two -t will restrict or filter output to packages also not set as optional dependency by any installed package. Makes it easy to spot potentially useless packages using -Qdttq Signed-off-by: Olivier Brunel <i.am.jack.mail@gmail.com> --- doc/pacman.8.txt | 4 +++- src/pacman/pacman.c | 2 +- src/pacman/query.c | 11 ++++++++--- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/doc/pacman.8.txt b/doc/pacman.8.txt index 1cc1eaa..6abd491 100644 --- a/doc/pacman.8.txt +++ b/doc/pacman.8.txt @@ -314,7 +314,9 @@ Query Options[[QO]] *-t, \--unrequired*:: Restrict or filter output to packages not required by any currently - installed package. + installed package. Passing two '--unrequired' or '-t' flags will restrict or + filter output to packages also not set as optional dependency by any + currently installed package. *-u, \--upgrades*:: Restrict or filter output to packages that are out-of-date on the local diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c index 7aa0271..4a94d32 100644 --- a/src/pacman/pacman.c +++ b/src/pacman/pacman.c @@ -483,7 +483,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 f5862a2..f15555a 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 */ -- 1.8.3.1