summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXavier Chantry <shiningxc@gmail.com>2008-08-24 02:29:10 +0200
committerDan McGee <dan@archlinux.org>2008-08-25 18:06:51 -0500
commit9dbe5c9d1ee5fb00f25515dfb5a2feb3ae6ebd59 (patch)
tree9f071d996ef5652d7744144374adbfc30a92d9ae
parenta06d0de104d2f03c19b917ea47394d8d6be89a9a (diff)
downloadpacman-9dbe5c9d1ee5fb00f25515dfb5a2feb3ae6ebd59.tar.xz
pacman : smarter optdepends handling.
During an upgrade, only the new optdepends will be displayed, to only keep the useful information and not clutter pacman output too much. The whole optdepends list is always available with -Si / -Qi. Signed-off-by: Xavier Chantry <shiningxc@gmail.com> Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r--src/pacman/callback.c2
-rw-r--r--src/pacman/util.c19
-rw-r--r--src/pacman/util.h1
3 files changed, 21 insertions, 1 deletions
diff --git a/src/pacman/callback.c b/src/pacman/callback.c
index 3c98d398..59b40643 100644
--- a/src/pacman/callback.c
+++ b/src/pacman/callback.c
@@ -203,7 +203,7 @@ void cb_trans_evt(pmtransevt_t event, void *data1, void *data2)
(char *)alpm_pkg_get_name(data1),
(char *)alpm_pkg_get_version(data2),
(char *)alpm_pkg_get_version(data1));
- display_optdepends(data1);
+ display_new_optdepends(data2,data1);
break;
case PM_TRANS_EVT_INTEGRITY_START:
printf(_("checking package integrity...\n"));
diff --git a/src/pacman/util.c b/src/pacman/util.c
index 14ae0ed3..fd0d38c7 100644
--- a/src/pacman/util.c
+++ b/src/pacman/util.c
@@ -609,6 +609,25 @@ void display_synctargets(const alpm_list_t *syncpkgs)
alpm_list_free(rpkglist);
}
+/* Helper function for comparing strings using the
+ * alpm "compare func" signature */
+int str_cmp(const void *s1, const void *s2)
+{
+ return(strcmp(s1, s2));
+}
+
+void display_new_optdepends(pmpkg_t *oldpkg, pmpkg_t *newpkg)
+{
+ alpm_list_t *old = alpm_pkg_get_optdepends(oldpkg);
+ alpm_list_t *new = alpm_pkg_get_optdepends(newpkg);
+ alpm_list_t *optdeps = alpm_list_diff(new,old,str_cmp);
+ if(optdeps) {
+ printf(_("New optional dependencies for %s\n"), alpm_pkg_get_name(newpkg));
+ list_display_linebreak(" ", optdeps);
+ }
+ alpm_list_free(optdeps);
+}
+
void display_optdepends(pmpkg_t *pkg)
{
alpm_list_t *optdeps = alpm_pkg_get_optdepends(pkg);
diff --git a/src/pacman/util.h b/src/pacman/util.h
index 66a9c4e7..cdb12bd6 100644
--- a/src/pacman/util.h
+++ b/src/pacman/util.h
@@ -54,6 +54,7 @@ void list_display(const char *title, const alpm_list_t *list);
void list_display_linebreak(const char *title, const alpm_list_t *list);
void display_targets(const alpm_list_t *pkgs, int install);
void display_synctargets(const alpm_list_t *syncpkgs);
+void display_new_optdepends(pmpkg_t *oldpkg, pmpkg_t *newpkg);
void display_optdepends(pmpkg_t *pkg);
int yesno(char *fmt, ...);
int noyes(char *fmt, ...);