[pacman-dev] attempt of reworking pacman_query function

Xavier shiningxc at gmail.com
Sat Jul 14 18:47:26 EDT 2007


On Sat, Jul 14, 2007 at 09:20:45PM +0200, Xavier wrote:
> Some examples :
> pacman -Qe : lists all explictly installed packages
> pacman -Qd : list all packages installed as dependencies
> pacman -Qt : list all orphans (package not required by any others)
> pacman -Qtd : list real orphans (package installed as dependencies,
>     but not required by any others anymore)
> (that is the current orphan option)
> pacman -Qte : list package explicitly installed and not 
> required by any others (pacman2 orphan option).
> 
> So the following patch does not add e and d options yet,
> it just prepare for them :)
> 

here is the missing bit :


>From 027f0977451406cdc8e430b1b9b7b234c091ff07 Mon Sep 17 00:00:00 2001
From: Chantry Xavier <shiningxc at gmail.com>
Date: Sun, 15 Jul 2007 00:44:06 +0200
Subject: [PATCH] new query options : explicit (-Qe) and deps (-Qd).

The t shortcut for --test was removed,
the orphan option (previously -Qe) was renamed to -Qt,
-Qe lists all packages installed explictly,
and -Qd lists all packages installed as dependencies.

Besides, t can be combined with either e or d.

Signed-off-by: Chantry Xavier <shiningxc at gmail.com>
---
 src/pacman/conf.h   |    2 ++
 src/pacman/pacman.c |   25 +++++++++++++++++--------
 src/pacman/query.c  |   10 ++++++++++
 3 files changed, 29 insertions(+), 8 deletions(-)

diff --git a/src/pacman/conf.h b/src/pacman/conf.h
index 252bb95..68defa9 100644
--- a/src/pacman/conf.h
+++ b/src/pacman/conf.h
@@ -42,6 +42,8 @@ typedef struct __config_t {
 	unsigned short op_q_list;
 	unsigned short op_q_foreign;
 	unsigned short op_q_orphans;
+	unsigned short op_q_deps;
+	unsigned short op_q_explicit;
 	unsigned short op_q_owns;
 	unsigned short op_q_search;
 	unsigned short op_q_changelog;
diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c
index 5281df6..e709329 100644
--- a/src/pacman/pacman.c
+++ b/src/pacman/pacman.c
@@ -112,8 +112,9 @@ static void usage(int op, char *myname)
 			printf("%s:  %s {-Q --query} [%s] [%s]\n", str_usg, myname, str_opt, str_pkg);
 			printf("%s:\n", str_opt);
 			printf(_("  -c, --changelog      view the changelog of a package\n"));
-			printf(_("  -e, --orphans        list all packages installed as dependencies but no longer\n"
-			         "                       required by any package\n"));
+			printf(_("  -t, --orphans        list all packages not required by any package\n"));
+			printf(_("  -e, --explicit       list all packages explicitly installed\n"));
+			printf(_("  -d, --deps           list all packages installed as dependencies\n"));
 			printf(_("  -g, --groups         view all members of a package group\n"));
 			printf(_("  -i, --info           view package information\n"));
 			printf(_("  -l, --list           list the contents of the queried package\n"));
@@ -121,7 +122,7 @@ static void usage(int op, char *myname)
 			printf(_("  -o, --owns <file>    query the package that owns <file>\n"));
 			printf(_("  -p, --file <package> query a package file instead of the database\n"));
 			printf(_("  -s, --search <regex> search locally-installed packages for matching strings\n"));
-			printf(_("  -t, --test           check the consistency of the local database\n"));
+			printf(_("      --test           check the consistency of the local database\n"));
 			printf(_("  -u, --upgrades       list all packages that can be upgraded\n"));
 		} else if(op == PM_OP_SYNC) {
 			printf("%s:  %s {-S --sync} [%s] [%s]\n", str_usg, myname, str_opt, str_pkg);
@@ -262,8 +263,9 @@ static int parseargs(int argc, char *argv[])
 		{"changelog",  no_argument,       0, 'c'},
 		{"clean",      no_argument,       0, 'c'},
 		{"nodeps",     no_argument,       0, 'd'},
+		{"deps",       no_argument,       0, 'd'},
 		{"dependsonly",no_argument,       0, 'e'},
-		{"orphans",    no_argument,       0, 'e'},
+		{"explicit",   no_argument,       0, 'e'},
 		{"force",      no_argument,       0, 'f'},
 		{"groups",     no_argument,       0, 'g'},
 		{"help",       no_argument,       0, 'h'},
@@ -278,7 +280,7 @@ static int parseargs(int argc, char *argv[])
 		{"root",       required_argument, 0, 'r'},
 		{"recursive",  no_argument,       0, 's'},
 		{"search",     no_argument,       0, 's'},
-		{"test",       no_argument,       0, 't'},
+		{"orphans",    no_argument,       0, 't'},
 		{"upgrades",   no_argument,       0, 'u'},
 		{"sysupgrade", no_argument,       0, 'u'},
 		{"verbose",    no_argument,       0, 'v'},
@@ -292,6 +294,7 @@ static int parseargs(int argc, char *argv[])
 		{"noscriptlet", no_argument,      0, 1005},
 		{"ask",        required_argument, 0, 1006},
 		{"cachedir",   required_argument, 0, 1007},
+		{"test",       no_argument,       0, 1008},
 		{0, 0, 0, 0}
 	};
 	struct stat st;
@@ -345,6 +348,9 @@ static int parseargs(int argc, char *argv[])
 				}
 				alpm_option_add_cachedir(optarg);
 				break;
+			case 1008:
+				config->op_q_test = 1;
+				break;
 			case 'A': config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_ADD); break;
 			case 'F':
 				config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_UPGRADE);
@@ -369,9 +375,12 @@ static int parseargs(int argc, char *argv[])
 				config->flags |= PM_TRANS_FLAG_CASCADE;
 				config->op_q_changelog = 1;
 				break;
-			case 'd': config->flags |= PM_TRANS_FLAG_NODEPS; break;
+			case 'd': 
+				config->op_q_deps = 1;
+				config->flags |= PM_TRANS_FLAG_NODEPS;
+				break;
 			case 'e':
-				config->op_q_orphans++;
+				config->op_q_explicit = 1;
 				config->flags |= PM_TRANS_FLAG_DEPENDSONLY;
 				break;
 			case 'f': config->flags |= PM_TRANS_FLAG_FORCE; break;
@@ -401,7 +410,7 @@ static int parseargs(int argc, char *argv[])
 				config->flags |= PM_TRANS_FLAG_RECURSE;
 				break;
 			case 't':
-				config->op_q_test = 1;
+				config->op_q_orphans = 1;
 				break;
 			case 'u':
 				config->op_s_upgrade = 1;
diff --git a/src/pacman/query.c b/src/pacman/query.c
index de118e7..b74a0c0 100644
--- a/src/pacman/query.c
+++ b/src/pacman/query.c
@@ -279,6 +279,16 @@ static int is_orphan(pmpkg_t *pkg)
 
 static int filter(pmpkg_t *pkg)
 {
+	/* check if this package was explicitly installed */
+	if(config->op_q_explicit && 
+			alpm_pkg_get_reason(pkg) != PM_PKG_REASON_EXPLICIT) {
+		return(0);
+	}
+	/* check if this package was installed as a dependency */
+	if(config->op_q_deps && 
+			alpm_pkg_get_reason(pkg) != PM_PKG_REASON_DEPEND) {
+		return(0);
+	}
 	/* check if this pkg isn't in a sync DB */
 	if(config->op_q_foreign && !is_foreign(pkg)) {
 		return(0);
-- 
1.5.2.2





More information about the pacman-dev mailing list