[pacman-dev] [PATCH] query_group: allow package filters
Allan McRae
allan at archlinux.org
Wed Jun 19 07:14:31 EDT 2013
On 19/06/13 15:23, Andrew Gregory wrote:
> Relocated query_group() to allow calling filter().
>
> Fixes FS#19716
>
> Signed-off-by: Andrew Gregory <andrew.gregory.8 at gmail.com>
Signed-off-by: Me
Aside:
I have just noticed how weird pacman -Qg is. I'd expect "pacman -Qg
base" to show output like pacman -Q but only for packages in base. i.e.
not have the "base" prefix and have a version. I wonder if these could
be unified more...
> ---
>
> The only actual changes are the two added:
> if(!filter(...)) {
> continue;
> }
>
> src/pacman/query.c | 88 +++++++++++++++++++++++++++++-------------------------
> 1 file changed, 47 insertions(+), 41 deletions(-)
>
> diff --git a/src/pacman/query.c b/src/pacman/query.c
> index f5862a2..4f5d80e 100644
> --- a/src/pacman/query.c
> +++ b/src/pacman/query.c
> @@ -257,47 +257,6 @@ static int query_search(alpm_list_t *targets)
> return dump_pkg_search(db_local, targets, 0);
> }
>
> -static int query_group(alpm_list_t *targets)
> -{
> - alpm_list_t *i, *j;
> - const char *grpname = NULL;
> - int ret = 0;
> - alpm_db_t *db_local = alpm_get_localdb(config->handle);
> -
> - if(targets == NULL) {
> - for(j = alpm_db_get_groupcache(db_local); j; j = alpm_list_next(j)) {
> - alpm_group_t *grp = j->data;
> - const alpm_list_t *p;
> -
> - for(p = grp->packages; p; p = alpm_list_next(p)) {
> - alpm_pkg_t *pkg = p->data;
> - printf("%s %s\n", grp->name, alpm_pkg_get_name(pkg));
> - }
> - }
> - } else {
> - for(i = targets; i; i = alpm_list_next(i)) {
> - alpm_group_t *grp;
> - grpname = i->data;
> - grp = alpm_db_get_group(db_local, grpname);
> - if(grp) {
> - const alpm_list_t *p;
> - for(p = grp->packages; p; p = alpm_list_next(p)) {
> - if(!config->quiet) {
> - printf("%s %s\n", grpname,
> - alpm_pkg_get_name(p->data));
> - } else {
> - printf("%s\n", alpm_pkg_get_name(p->data));
> - }
> - }
> - } else {
> - pm_printf(ALPM_LOG_ERROR, _("group '%s' was not found\n"), grpname);
> - ret++;
> - }
> - }
> - }
> - return ret;
> -}
> -
> static unsigned short pkg_get_locality(alpm_pkg_t *pkg)
> {
> const char *pkgname = alpm_pkg_get_name(pkg);
> @@ -387,6 +346,53 @@ static int display(alpm_pkg_t *pkg)
> return ret;
> }
>
> +static int query_group(alpm_list_t *targets)
> +{
> + alpm_list_t *i, *j;
> + const char *grpname = NULL;
> + int ret = 0;
> + alpm_db_t *db_local = alpm_get_localdb(config->handle);
> +
> + if(targets == NULL) {
> + for(j = alpm_db_get_groupcache(db_local); j; j = alpm_list_next(j)) {
> + alpm_group_t *grp = j->data;
> + const alpm_list_t *p;
> +
> + for(p = grp->packages; p; p = alpm_list_next(p)) {
> + alpm_pkg_t *pkg = p->data;
> + if(!filter(pkg)) {
> + continue;
> + }
> + printf("%s %s\n", grp->name, alpm_pkg_get_name(pkg));
> + }
> + }
> + } else {
> + for(i = targets; i; i = alpm_list_next(i)) {
> + alpm_group_t *grp;
> + grpname = i->data;
> + grp = alpm_db_get_group(db_local, grpname);
> + if(grp) {
> + const alpm_list_t *p;
> + for(p = grp->packages; p; p = alpm_list_next(p)) {
> + if(!filter(p->data)) {
> + continue;
> + }
> + if(!config->quiet) {
> + printf("%s %s\n", grpname,
> + alpm_pkg_get_name(p->data));
> + } else {
> + printf("%s\n", alpm_pkg_get_name(p->data));
> + }
> + }
> + } else {
> + pm_printf(ALPM_LOG_ERROR, _("group '%s' was not found\n"), grpname);
> + ret++;
> + }
> + }
> + }
> + return ret;
> +}
> +
> int pacman_query(alpm_list_t *targets)
> {
> int ret = 0;
>
More information about the pacman-dev
mailing list