[pacman-dev] [PATCH] Display optdep install status in package query output

Allan McRae allan at archlinux.org
Sat Aug 11 07:48:28 EDT 2012


Indicate which optional dependencies are installed when viewing
local package information (-Qi).

Signed-off-by: Allan McRae <allan at archlinux.org>
---

Example output:

> ./src/pacman/pacman -Qi git
Name           : git
...
Optional Deps  : tk: gitk and git gui [installed]
                 perl-libwww: git svn
                 perl-term-readkey: git svn
                 perl-mime-tools: git send-email
                 perl-net-smtp-ssl: git send-email TLS support
                 perl-authen-sasl: git send-email TLS support
                 python2: various helper scripts [installed]
                 subversion: git svn [installed]
                 cvsps: git cvsimport


 src/pacman/package.c | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/src/pacman/package.c b/src/pacman/package.c
index 77d58e1..3556a81 100644
--- a/src/pacman/package.c
+++ b/src/pacman/package.c
@@ -33,6 +33,7 @@
 #include "package.h"
 #include "util.h"
 #include "conf.h"
+#include "db.h"
 
 #define CLBUF_SIZE 4096
 
@@ -54,15 +55,22 @@ static void deplist_display(const char *title,
 /** Turn a optdepends list into a text list.
  * @param optdeps a list with items of type alpm_depend_t
  */
-static void optdeplist_display(const char *title,
-		alpm_list_t *optdeps, unsigned short cols)
+static void optdeplist_display(alpm_pkg_t *pkg, unsigned short cols)
 {
 	alpm_list_t *i, *text = NULL;
-	for(i = optdeps; i; i = alpm_list_next(i)) {
+	for(i = alpm_pkg_get_optdepends(pkg); i; i = alpm_list_next(i)) {
 		alpm_depend_t *optdep = i->data;
-		text = alpm_list_add(text, alpm_dep_compute_string(optdep));
+		char *depstring = alpm_dep_compute_string(optdep);
+		if(alpm_pkg_get_origin(pkg) == ALPM_PKG_FROM_LOCALDB) {
+			if(alpm_db_get_pkg(alpm_get_localdb(config->handle), optdep->name)) {
+				const char *installed = _(" [installed]");
+				depstring = realloc(depstring, strlen(depstring) + strlen(installed) + 1);
+				strcpy(depstring + strlen(depstring), installed);
+			}
+		}
+		text = alpm_list_add(text, depstring);
 	}
-	list_display_linebreak(title, text, cols);
+	list_display_linebreak(_("Optional Deps  :"), text, cols);
 	FREELIST(text);
 }
 
@@ -148,7 +156,8 @@ void dump_pkg_full(alpm_pkg_t *pkg, int extra)
 	list_display(_("Groups         :"), alpm_pkg_get_groups(pkg), cols);
 	deplist_display(_("Provides       :"), alpm_pkg_get_provides(pkg), cols);
 	deplist_display(_("Depends On     :"), alpm_pkg_get_depends(pkg), cols);
-	optdeplist_display(_("Optional Deps  :"), alpm_pkg_get_optdepends(pkg), cols);
+	optdeplist_display(pkg, cols);
+
 	if(extra || from == ALPM_PKG_FROM_LOCALDB) {
 		list_display(_("Required By    :"), requiredby, cols);
 	}
-- 
1.7.11.4



More information about the pacman-dev mailing list