On 15/06/13 22:07, Olivier Brunel wrote:
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.
I'd prefer the opposite: *-t, \--unrequired*:: Restrict or filter output to packages not required or optionally required by any currently installed package. Specify this option twice to only filter packages that are direct dependencies (i.e. do not filter optional dependencies).
*-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 */