[pacman-dev] [PATCH] Add support for passing --unrequired twice (for optdep)

Allan McRae allan at archlinux.org
Sun Jun 16 05:57:10 EDT 2013


On 15/06/13 22:07, Olivier Brunel wrote:
> Passing two -t will restrict or filter output to packages also not set as
> optional dependency by any installed package.
> 
> Makes it easy to spot potentially useless packages using -Qdttq
> 
> Signed-off-by: Olivier Brunel <i.am.jack.mail at gmail.com>
> ---
>  doc/pacman.8.txt    |  4 +++-
>  src/pacman/pacman.c |  2 +-
>  src/pacman/query.c  | 11 ++++++++---
>  3 files changed, 12 insertions(+), 5 deletions(-)
> 
> diff --git a/doc/pacman.8.txt b/doc/pacman.8.txt
> index 1cc1eaa..6abd491 100644
> --- a/doc/pacman.8.txt
> +++ b/doc/pacman.8.txt
> @@ -314,7 +314,9 @@ Query Options[[QO]]
>  
>  *-t, \--unrequired*::
>  	Restrict or filter output to packages not required by any currently
> -	installed package.
> +	installed package. Passing two '--unrequired' or '-t' flags will restrict or
> +	filter output to packages also not set as optional dependency by any
> +	currently installed package.

I'd prefer the opposite:

 *-t, \--unrequired*::
 	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..4a94d32 100644
> --- a/src/pacman/pacman.c
> +++ b/src/pacman/pacman.c
> @@ -483,7 +483,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..f15555a 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 */
> 



More information about the pacman-dev mailing list