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

jjacky i.am.jack.mail at gmail.com
Sun Jun 16 07:14:36 EDT 2013


On 06/16/13 11:57, Allan McRae wrote:
> 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).

Sure, quick question then: Should the help string (on -Qh) be modified
to reflect this change?

If so, I'm not sure how best to quickly describe it; this removes the
"of any package" bit, but it should still be clear?

"list packages not direct/opt (-tt direct only) dependencies [filter]"

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