On 11/08/12 21:48, Allan McRae wrote:
> Indicate which optional dependencies are installed when viewing
> local package information (-Qi).
> 
> Signed-off-by: Allan McRae <[email protected]>
> ---
> 
> 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"

Obviously no need for that include.  Removed on my working branch.

>  #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);
>       }
> 


Reply via email to