From cb43bd8dfbee0396ff6f56c20690995adfcf3b99 Mon Sep 17 00:00:00 2001 From: Simon Gomizelj Date: Thu, 13 Dec 2012 10:06:41 -0500 Subject: Consolidate --foreign/--native filtering Also fix a small bug where pacman won't check if the sync dbs are first downloaded when invoked with --native (it should). Signed-off-by: Simon Gomizelj Signed-off-by: Allan McRae --- src/pacman/conf.h | 11 +++++++++-- src/pacman/pacman.c | 4 ++-- src/pacman/query.c | 16 ++++++---------- 3 files changed, 17 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/pacman/conf.h b/src/pacman/conf.h index 06d2fd5a..408b5913 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_UNSET = 0, + PKG_LOCALITY_LOCAL = (1 << 0), + PKG_LOCALITY_FOREIGN = (1 << 1) +}; + + /* global config variable */ extern config_t *config; diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c index 8448d6b4..dad12c5c 100644 --- a/src/pacman/pacman.c +++ b/src/pacman/pacman.c @@ -463,8 +463,8 @@ static int parsearg_query(int opt) case 'i': (config->op_q_info)++; break; case 'k': (config->op_q_check)++; 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 ef279d97..1247c3d4 100644 --- a/src/pacman/query.c +++ b/src/pacman/query.c @@ -361,7 +361,7 @@ 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; @@ -369,10 +369,10 @@ static int is_foreign(alpm_pkg_t *pkg) for(j = sync_dbs; j; j = alpm_list_next(j)) { if(alpm_db_get_pkg(j->data, pkgname)) { - return 0; + return PKG_LOCALITY_LOCAL; } } - return 1; + return PKG_LOCALITY_FOREIGN; } static int is_unrequired(alpm_pkg_t *pkg) @@ -397,12 +397,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 */ @@ -474,7 +470,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; } -- cgit v1.2.3-24-g4f1b