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, ...);