[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