On 14/12/12 01:06, Simon Gomizelj wrote:
> Also fix a small bug where pacman won't check if the sync dbs are first
> downloaded when invoked with --native (it should).

I am missing where this is fixed...   Can you give me a pointer so I can
decided whether that should be a separate patch.

> Signed-off-by: Simon Gomizelj <[email protected]>
> ---

@Dave - I think this addresses all your comments from the previous
version.  Do I get an ack from you?

Also, do we want to do the same for --deps/--explicit.

One small comment below.

>  src/pacman/conf.h   | 11 +++++++++--
>  src/pacman/pacman.c |  4 ++--
>  src/pacman/query.c  | 21 ++++++---------------
>  3 files changed, 17 insertions(+), 19 deletions(-)
> 
> diff --git a/src/pacman/conf.h b/src/pacman/conf.h
> index aee6859..5ce0fb1 100644
> --- a/src/pacman/conf.h
> +++ b/src/pacman/conf.h
> @@ -50,8 +50,6 @@ typedef struct __config_t {
>       unsigned short op_q_isfile;
>       unsigned short op_q_info;
>       unsigned short op_q_list;
> -     unsigned short op_q_foreign;
> -     unsigned short op_q_native;
>       unsigned short op_q_unrequired;
>       unsigned short op_q_deps;
>       unsigned short op_q_explicit;
> @@ -60,6 +58,7 @@ typedef struct __config_t {
>       unsigned short op_q_changelog;
>       unsigned short op_q_upgrade;
>       unsigned short op_q_check;
> +     unsigned short op_q_locality;
>  
>       unsigned short op_s_clean;
>       unsigned short op_s_downloadonly;
> @@ -137,6 +136,14 @@ enum {
>       PM_CLEAN_KEEPCUR = (1 << 1)
>  };
>  
> +/** package locality */
> +enum {
> +     PKG_LOCALITY_UNKNOWN = 0,
> +     PKG_LOCALITY_LOCAL = (1 << 0),
> +     PKG_LOCALITY_FOREIGN = (1 << 1)
> +};
> +

Every time I look at this I think "a package can only be local or
foreign.  There is no unknown.  Would PKG_LOCALITY_UNSET be clearer?

> +
>  /* global config variable */
>  extern config_t *config;
>  
> diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c
> index 1ca746d..5dccad6 100644
> --- a/src/pacman/pacman.c
> +++ b/src/pacman/pacman.c
> @@ -462,8 +462,8 @@ static int parsearg_query(int opt)
>               case 'i': (config->op_q_info)++; break;
>               case 'k': config->op_q_check = 1; break;
>               case 'l': config->op_q_list = 1; break;
> -             case 'm': config->op_q_foreign = 1; break;
> -             case 'n': config->op_q_native = 1; break;
> +             case 'm': config->op_q_locality |= PKG_LOCALITY_LOCAL; break;
> +             case 'n': config->op_q_locality |= PKG_LOCALITY_FOREIGN; break;
>               case 'o': config->op_q_owns = 1; break;
>               case 'p': config->op_q_isfile = 1; break;
>               case 'q': config->quiet = 1; break;
> diff --git a/src/pacman/query.c b/src/pacman/query.c
> index 2736672..6d4739a 100644
> --- a/src/pacman/query.c
> +++ b/src/pacman/query.c
> @@ -337,25 +337,20 @@ static int query_group(alpm_list_t *targets)
>       return ret;
>  }
>  
> -static int is_foreign(alpm_pkg_t *pkg)
> +static unsigned short pkg_get_locality(alpm_pkg_t *pkg)
>  {
>       const char *pkgname = alpm_pkg_get_name(pkg);
>       alpm_list_t *j;
>       alpm_list_t *sync_dbs = alpm_get_syncdbs(config->handle);
>  
> -     int match = 0;
>       for(j = sync_dbs; j; j = alpm_list_next(j)) {
>               alpm_db_t *db = j->data;
>               alpm_pkg_t *findpkg = alpm_db_get_pkg(db, pkgname);
>               if(findpkg) {
> -                     match = 1;
> -                     break;
> +                     return PKG_LOCALITY_LOCAL;
>               }
>       }
> -     if(match == 0) {
> -             return 1;
> -     }
> -     return 0;
> +     return PKG_LOCALITY_FOREIGN;
>  }
>  
>  static int is_unrequired(alpm_pkg_t *pkg)
> @@ -380,12 +375,8 @@ static int filter(alpm_pkg_t *pkg)
>                       alpm_pkg_get_reason(pkg) != ALPM_PKG_REASON_DEPEND) {
>               return 0;
>       }
> -     /* check if this pkg is in a sync DB */
> -     if(config->op_q_native && is_foreign(pkg)) {
> -             return 0;
> -     }
> -     /* check if this pkg isn't in a sync DB */
> -     if(config->op_q_foreign && !is_foreign(pkg)) {
> +     /* check if this pkg is or isn't in a sync DB */
> +     if(config->op_q_locality && config->op_q_locality & 
> pkg_get_locality(pkg)) {
>               return 0;
>       }
>       /* check if this pkg is unrequired */
> @@ -507,7 +498,7 @@ int pacman_query(alpm_list_t *targets)
>               return ret;
>       }
>  
> -     if(config->op_q_foreign || config->op_q_upgrade) {
> +     if(config->op_q_locality || config->op_q_upgrade) {
>               if(check_syncdbs(1, 1)) {
>                       return 1;
>               }
> 


Reply via email to