[pacman-dev] [PATCH] Display install status of optdependencies

Allan McRae allan at archlinux.org
Sun Aug 12 07:11:59 EDT 2012


When a packages (new) optdepends are printed in install (update),
add a note of their current installation status.  Packages currently
installed are labelled with [installed] and packages to be installed
in this transaction are labelled [pending].

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

I went a different way to previous patches that altered this.  They
all did not display installed optdependencies, but I prefer showing
them by default.  Later there may be an option added to install all
optdepends by default and in that case the output can be removed.


Example output:

> sudo ./src/pacman/pacman -S git perl-term-readkey
Password: 
resolving dependencies...
looking for inter-conflicts...

Packages (2): git-1.7.11.4-1  perl-term-readkey-2.30.02-2

Total Installed Size:   16.79 MiB

Proceed with installation? [Y/n] 
(2/2) checking package integrity                   [######################] 100%
(2/2) loading package files                        [######################] 100%
(2/2) checking for file conflicts                  [######################] 100%
(1/2) installing git                               [######################] 100%
Optional dependencies for git
    tk: gitk and git gui [installed]
    perl-libwww: git svn
    perl-term-readkey: git svn [pending]
    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
(2/2) installing perl-term-readkey                 [######################] 100%


 src/pacman/util.c | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/src/pacman/util.c b/src/pacman/util.c
index 995308c..4d8727f 100644
--- a/src/pacman/util.c
+++ b/src/pacman/util.c
@@ -1192,6 +1192,22 @@ static int depend_cmp(const void *d1, const void *d2)
 	return ret;
 }
 
+static char *make_optstring(alpm_depend_t *optdep)
+{
+	char *optstring = alpm_dep_compute_string(optdep);
+	char *status = NULL;
+	if(alpm_db_get_pkg(alpm_get_localdb(config->handle), optdep->name)) {
+		status = _(" [installed]");
+	} else if(alpm_pkg_find(alpm_trans_get_add(config->handle), optdep->name)) {
+		status = _(" [pending]");
+	}
+	if(status) {
+		optstring = realloc(optstring, strlen(optstring) + strlen(status) + 1);
+		strcpy(optstring + strlen(optstring), status);
+	}
+	return optstring;
+}
+
 void display_new_optdepends(alpm_pkg_t *oldpkg, alpm_pkg_t *newpkg)
 {
 	alpm_list_t *i, *old, *new, *optdeps, *optstrings = NULL;
@@ -1203,7 +1219,7 @@ void display_new_optdepends(alpm_pkg_t *oldpkg, alpm_pkg_t *newpkg)
 	/* turn optdepends list into a text list */
 	for(i = optdeps; i; i = alpm_list_next(i)) {
 		alpm_depend_t *optdep = i->data;
-		optstrings = alpm_list_add(optstrings, alpm_dep_compute_string(optdep));
+		optstrings = alpm_list_add(optstrings, make_optstring(optdep));
 	}
 
 	if(optstrings) {
@@ -1225,7 +1241,7 @@ void display_optdepends(alpm_pkg_t *pkg)
 	/* turn optdepends list into a text list */
 	for(i = optdeps; i; i = alpm_list_next(i)) {
 		alpm_depend_t *optdep = i->data;
-		optstrings = alpm_list_add(optstrings, alpm_dep_compute_string(optdep));
+		optstrings = alpm_list_add(optstrings, make_optstring(optdep));
 	}
 
 	if(optstrings) {
-- 
1.7.11.4



More information about the pacman-dev mailing list