[pacman-dev] [PATCH v2] Make --unrequired filter packages that are optdep as well

Allan McRae allan at archlinux.org
Tue Jun 18 01:21:48 EDT 2013


On 17/06/13 18:46, Olivier Brunel wrote:
> Specify it twice to only filter direct dependencies.
> 
> Signed-off-by: Olivier Brunel <i.am.jack.mail at gmail.com>

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 */
> 



More information about the pacman-dev mailing list