[pacman-dev] [PATCH] Add support for passing --unrequired twice (for optdep)
Olivier Brunel
i.am.jack.mail at gmail.com
Sat Jun 15 08:07:51 EDT 2013
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 at 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
More information about the pacman-dev
mailing list