[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