On 17/06/13 18:46, Olivier Brunel wrote:
> Specify it twice to only filter direct dependencies.
> 
> Signed-off-by: Olivier Brunel <[email protected]>

Signed-off-by: Me


> ---
>  doc/pacman.8.txt    |  6 ++++--
>  src/pacman/pacman.c |  5 +++--
>  src/pacman/query.c  | 11 ++++++++---
>  3 files changed, 15 insertions(+), 7 deletions(-)
> 
> diff --git a/doc/pacman.8.txt b/doc/pacman.8.txt
> index 1cc1eaa..574995c 100644
> --- a/doc/pacman.8.txt
> +++ b/doc/pacman.8.txt
> @@ -313,8 +313,10 @@ Query Options[[QO]]
>       with descriptions matching ALL of those terms are returned.
>  
>  *-t, \--unrequired*::
> -     Restrict or filter output to packages not required by any currently
> -     installed package.
> +     Restrict or filter output to packages not required or optionally 
> required by
> +     any currently installed package. Specify this option twice to only 
> filter
> +     packages that are direct dependencies (i.e. do not filter optional
> +     dependencies).
>  
>  *-u, \--upgrades*::
>       Restrict or filter output to packages that are out-of-date on the local
> diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c
> index 7aa0271..5ce8747 100644
> --- a/src/pacman/pacman.c
> +++ b/src/pacman/pacman.c
> @@ -146,7 +146,8 @@ static void usage(int op, const char * const myname)
>                       addlist(_("  -p, --file <package> query a package file 
> instead of the database\n"));
>                       addlist(_("  -q, --quiet          show less information 
> for query and search\n"));
>                       addlist(_("  -s, --search <regex> search 
> locally-installed packages for matching strings\n"));
> -                     addlist(_("  -t, --unrequired     list packages not 
> required by any package [filter]\n"));
> +                     addlist(_("  -t, --unrequired     list packages not 
> (optionally) required by any\n"
> +                               "                       package (-tt to 
> ignore optdepends) [filter]\n"));
>                       addlist(_("  -u, --upgrades       list outdated 
> packages [filter]\n"));
>               } else if(op == PM_OP_SYNC) {
>                       printf("%s:  %s {-S --sync} [%s] [%s]\n", str_usg, 
> myname, str_opt, str_pkg);
> @@ -483,7 +484,7 @@ static int parsearg_query(int opt)
>               case 'p': config->op_q_isfile = 1; break;
>               case 'q': config->quiet = 1; break;
>               case 's': config->op_q_search = 1; break;
> -             case 't': config->op_q_unrequired = 1; break;
> +             case 't': (config->op_q_unrequired)++; break;
>               case 'u': config->op_q_upgrade = 1; break;
>               default: return 1;
>       }
> diff --git a/src/pacman/query.c b/src/pacman/query.c
> index f5862a2..e88b393 100644
> --- a/src/pacman/query.c
> +++ b/src/pacman/query.c
> @@ -312,11 +312,16 @@ static unsigned short pkg_get_locality(alpm_pkg_t *pkg)
>       return PKG_LOCALITY_FOREIGN;
>  }
>  
> -static int is_unrequired(alpm_pkg_t *pkg)
> +static int is_unrequired(alpm_pkg_t *pkg, unsigned short level)
>  {
>       alpm_list_t *requiredby = alpm_pkg_compute_requiredby(pkg);
>       if(requiredby == NULL) {
> -             return 1;
> +             if(level == 1) {
> +                     requiredby = alpm_pkg_compute_optionalfor(pkg);
> +             }
> +             if(requiredby == NULL) {
> +                     return 1;
> +             }
>       }
>       FREELIST(requiredby);
>       return 0;
> @@ -339,7 +344,7 @@ static int filter(alpm_pkg_t *pkg)
>               return 0;
>       }
>       /* check if this pkg is unrequired */
> -     if(config->op_q_unrequired && !is_unrequired(pkg)) {
> +     if(config->op_q_unrequired && !is_unrequired(pkg, 
> config->op_q_unrequired)) {
>               return 0;
>       }
>       /* check if this pkg is outdated */
> 


Reply via email to