On 02/03/13 07:32, Simon Gomizelj wrote:
> Signed-off-by: Simon Gomizelj <[email protected]>
> ---
>  src/pacman/package.c | 77 
> ++++++++++++++++++++++++++++++++++++++++++++++++++++
>  src/pacman/package.h |  3 ++
>  src/pacman/query.c   | 56 +-------------------------------------
>  src/pacman/sync.c    | 76 +++------------------------------------------------
>  4 files changed, 85 insertions(+), 127 deletions(-)
> 
> diff --git a/src/pacman/package.c b/src/pacman/package.c
> index 330f7ab..6daf745 100644
> --- a/src/pacman/package.c
> +++ b/src/pacman/package.c
> @@ -341,4 +341,81 @@ void dump_pkg_changelog(alpm_pkg_t *pkg)
>       }
>  }
>  
> +void print_installed(alpm_db_t *db_local, alpm_pkg_t *pkg)
> +{
> +     const char *pkgname = alpm_pkg_get_name(pkg);
> +     const char *pkgver = alpm_pkg_get_version(pkg);
> +     alpm_pkg_t *lpkg = alpm_db_get_pkg(db_local, pkgname);
> +     if(lpkg) {
> +             const char *lpkgver = alpm_pkg_get_version(lpkg);
> +             if(strcmp(lpkgver, pkgver) == 0) {
> +                     printf(" [%s]", _("installed"));
> +             } else {
> +                     printf(" [%s: %s]", _("installed"), lpkgver);
> +             }
> +     }
> +}
> +
> +/* search a database for a matching package */
> +int dump_pkg_search(alpm_db_t *db, alpm_list_t *targets, alpm_db_t 
> *installed_in)

We should change that installed_in parameter to something else... status_db?

Or just replace it with a true/false parameter to print the installation
status?   In fact... do this (even though it means calling
alpm_get_localdb for every configured repo - tiny overhead).

Also, add some doxygen comment at the top so we know what the parameter
does...

> +{
> +     int freelist = 0;
> +     alpm_list_t *i, *searchlist;
> +     unsigned short cols;
> +
> +     /* if we have a targets list, search for packages matching it */
> +     if(targets) {
> +             searchlist = alpm_db_search(db, targets);
> +             freelist = 1;
> +     } else {
> +             searchlist = alpm_db_get_pkgcache(db);
> +             freelist = 0;
> +     }
> +     if(searchlist == NULL) {
> +             return 1;
> +     }
> +
> +     cols = getcols(fileno(stdout));
> +     for(i = searchlist; i; i = alpm_list_next(i)) {
> +             alpm_list_t *grp;
> +             alpm_pkg_t *pkg = i->data;
> +
> +             if(config->quiet) {
> +                     fputs(alpm_pkg_get_name(pkg), stdout);
> +             } else {
> +                     printf("%s/%s %s", alpm_db_get_name(db),
> +                                     alpm_pkg_get_name(pkg), 
> alpm_pkg_get_version(pkg));
> +
> +                     if((grp = alpm_pkg_get_groups(pkg)) != NULL) {
> +                             alpm_list_t *k;
> +                             fputs(" (", stdout);
> +                             for(k = grp; k; k = alpm_list_next(k)) {
> +                                     const char *group = k->data;
> +                                     fputs(group, stdout);
> +                                     if(alpm_list_next(k)) {
> +                                             /* only print a spacer if there 
> are more groups */
> +                                             putchar(' ');
> +                                     }
> +                             }
> +                             putchar(')');
> +                     }
> +
> +                     if (installed_in)
> +                             print_installed(installed_in, pkg);
> +
> +                     /* we need a newline and initial indent first */
> +                     fputs("\n    ", stdout);
> +                     indentprint(alpm_pkg_get_desc(pkg), 4, cols);
> +             }
> +             fputc('\n', stdout);
> +     }
> +
> +     /* we only want to free if the list was a search list */
> +     if(freelist) {
> +             alpm_list_free(searchlist);
> +     }
> +
> +     return 0;
> +}
> +
>  /* vim: set ts=2 sw=2 noet: */
> diff --git a/src/pacman/package.h b/src/pacman/package.h
> index 47fbcad..635d5f7 100644
> --- a/src/pacman/package.h
> +++ b/src/pacman/package.h
> @@ -28,6 +28,9 @@ void dump_pkg_backups(alpm_pkg_t *pkg);
>  void dump_pkg_files(alpm_pkg_t *pkg, int quiet);
>  void dump_pkg_changelog(alpm_pkg_t *pkg);
>  
> +void print_installed(alpm_db_t *db_local, alpm_pkg_t *pkg);
> +int dump_pkg_search(alpm_db_t *db, alpm_list_t *targets, alpm_db_t 
> *installed_in);
> +
>  #endif /* _PM_PACKAGE_H */
>  
>  /* vim: set ts=2 sw=2 noet: */
> diff --git a/src/pacman/query.c b/src/pacman/query.c
> index 1247c3d..416f92c 100644
> --- a/src/pacman/query.c
> +++ b/src/pacman/query.c
> @@ -262,62 +262,8 @@ targcleanup:
>  /* search the local database for a matching package */
>  static int query_search(alpm_list_t *targets)
>  {
> -     alpm_list_t *i, *searchlist;
> -     int freelist;
>       alpm_db_t *db_local = alpm_get_localdb(config->handle);
> -     unsigned short cols;
> -
> -     /* if we have a targets list, search for packages matching it */
> -     if(targets) {
> -             searchlist = alpm_db_search(db_local, targets);
> -             freelist = 1;
> -     } else {
> -             searchlist = alpm_db_get_pkgcache(db_local);
> -             freelist = 0;
> -     }
> -     if(searchlist == NULL) {
> -             return 1;
> -     }
> -
> -     cols = getcols(fileno(stdout));
> -     for(i = searchlist; i; i = alpm_list_next(i)) {
> -             alpm_list_t *grp;
> -             alpm_pkg_t *pkg = i->data;
> -
> -             if(!config->quiet) {
> -                     printf(LOCAL_PREFIX "%s %s", alpm_pkg_get_name(pkg), 
> alpm_pkg_get_version(pkg));
> -             } else {
> -                     fputs(alpm_pkg_get_name(pkg), stdout);
> -             }
> -
> -
> -             if(!config->quiet) {
> -                     if((grp = alpm_pkg_get_groups(pkg)) != NULL) {
> -                             alpm_list_t *k;
> -                             fputs(" (", stdout);
> -                             for(k = grp; k; k = alpm_list_next(k)) {
> -                                     const char *group = k->data;
> -                                     fputs(group, stdout);
> -                                     if(alpm_list_next(k)) {
> -                                             /* only print a spacer if there 
> are more groups */
> -                                             putchar(' ');
> -                                     }
> -                             }
> -                             putchar(')');
> -                     }
> -
> -                     /* we need a newline and initial indent first */
> -                     fputs("\n    ", stdout);
> -                     indentprint(alpm_pkg_get_desc(pkg), 4, cols);
> -             }
> -             fputc('\n', stdout);
> -     }
> -
> -     /* we only want to free if the list was a search list */
> -     if(freelist) {
> -             alpm_list_free(searchlist);
> -     }
> -     return 0;
> +     return dump_pkg_search(db_local, targets, NULL);
>  }
>  
>  static int query_group(alpm_list_t *targets)
> diff --git a/src/pacman/sync.c b/src/pacman/sync.c
> index 924cdf5..b1cc3fe 100644
> --- a/src/pacman/sync.c
> +++ b/src/pacman/sync.c
> @@ -352,87 +352,19 @@ static int sync_synctree(int level, alpm_list_t *syncs)
>       return (success > 0);
>  }
>  
> -static void print_installed(alpm_db_t *db_local, alpm_pkg_t *pkg)
> -{
> -     const char *pkgname = alpm_pkg_get_name(pkg);
> -     const char *pkgver = alpm_pkg_get_version(pkg);
> -     alpm_pkg_t *lpkg = alpm_db_get_pkg(db_local, pkgname);
> -     if(lpkg) {
> -             const char *lpkgver = alpm_pkg_get_version(lpkg);
> -             if(strcmp(lpkgver, pkgver) == 0) {
> -                     printf(" [%s]", _("installed"));
> -             } else {
> -                     printf(" [%s: %s]", _("installed"), lpkgver);
> -             }
> -     }
> -}
> -
>  /* search the sync dbs for a matching package */
>  static int sync_search(alpm_list_t *syncs, alpm_list_t *targets)
>  {
> -     alpm_list_t *i, *j, *ret;
> -     int freelist;
> -     int found = 0;
> +     alpm_list_t *i;
>       alpm_db_t *db_local = alpm_get_localdb(config->handle);
> +     int found = 0;
>  
>       for(i = syncs; i; i = alpm_list_next(i)) {
>               alpm_db_t *db = i->data;
> -             unsigned short cols;
> -             /* if we have a targets list, search for packages matching it */
> -             if(targets) {
> -                     ret = alpm_db_search(db, targets);
> -                     freelist = 1;
> -             } else {
> -                     ret = alpm_db_get_pkgcache(db);
> -                     freelist = 0;
> -             }
> -             if(ret == NULL) {
> -                     continue;
> -             } else {
> -                     found = 1;
> -             }
> -             cols = getcols(fileno(stdout));
> -             for(j = ret; j; j = alpm_list_next(j)) {
> -                     alpm_list_t *grp;
> -                     alpm_pkg_t *pkg = j->data;
> -
> -                     if(!config->quiet) {
> -                             printf("%s/%s %s", alpm_db_get_name(db), 
> alpm_pkg_get_name(pkg),
> -                                                      
> alpm_pkg_get_version(pkg));
> -                     } else {
> -                             fputs(alpm_pkg_get_name(pkg), stdout);
> -                     }
> -
> -                     if(!config->quiet) {
> -                             if((grp = alpm_pkg_get_groups(pkg)) != NULL) {
> -                                     alpm_list_t *k;
> -                                     fputs(" (", stdout);
> -                                     for(k = grp; k; k = alpm_list_next(k)) {
> -                                             const char *group = k->data;
> -                                             fputs(group, stdout);
> -                                             if(alpm_list_next(k)) {
> -                                                     /* only print a spacer 
> if there are more groups */
> -                                                     putchar(' ');
> -                                             }
> -                                     }
> -                                     putchar(')');
> -                             }
> -
> -                             print_installed(db_local, pkg);
> -
> -                             /* we need a newline and initial indent first */
> -                             fputs("\n    ", stdout);
> -                             indentprint(alpm_pkg_get_desc(pkg), 4, cols);
> -                     }
> -                     fputc('\n', stdout);
> -             }
> -             /* we only want to free if the list was a search list */
> -             if(freelist) {
> -                     alpm_list_free(ret);
> -             }
> +             found += !dump_pkg_search(db, targets, db_local);
>       }
>  
> -     return !found;
> +     return (found == 0);
>  }
>  
>  static int sync_group(int level, alpm_list_t *syncs, alpm_list_t *targets)
> 


Reply via email to