diff --git a/doc/pacman.8.txt b/doc/pacman.8.txt index 24c22431..de28b9ca 100644 --- a/doc/pacman.8.txt +++ b/doc/pacman.8.txt @@ -273,6 +273,10 @@ Query Options[[QO]] database(s). Typically these are packages that were downloaded manually and installed with '\--upgrade'. +*-n, \--native*:: + Restrict or filter output to packages that are found in the sync + database(s). This is the inverse filter of '\--foreign'. + *-o, \--owns* :: Search for packages that own the specified file(s). The path can be relative or absolute and one or more files can be specified. diff --git a/src/pacman/conf.h b/src/pacman/conf.h index 69c955ed..aee68597 100644 --- a/src/pacman/conf.h +++ b/src/pacman/conf.h @@ -51,6 +51,7 @@ typedef struct __config_t { 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; diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c index 478196e2..1ca746d7 100644 --- a/src/pacman/pacman.c +++ b/src/pacman/pacman.c @@ -142,6 +142,7 @@ static void usage(int op, const char * const myname) addlist(_(" -k, --check check that the files owned by the package(s) are present\n")); addlist(_(" -l, --list list the contents of the queried package\n")); addlist(_(" -m, --foreign list installed packages not found in sync db(s) [filter]\n")); + addlist(_(" -n, --native list installed packages only found in sync db(s) [filter]\n")); addlist(_(" -o, --owns query the package that owns \n")); addlist(_(" -p, --file query a package file instead of the database\n")); addlist(_(" -q, --quiet show less information for query and search\n")); @@ -462,6 +463,7 @@ static int parsearg_query(int opt) 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 'o': config->op_q_owns = 1; break; case 'p': config->op_q_isfile = 1; break; case 'q': config->quiet = 1; break; @@ -594,6 +596,7 @@ static int parseargs(int argc, char *argv[]) {"check", no_argument, 0, 'k'}, {"list", no_argument, 0, 'l'}, {"foreign", no_argument, 0, 'm'}, + {"native", no_argument, 0, 'n'}, {"nosave", no_argument, 0, 'n'}, {"owns", no_argument, 0, 'o'}, {"file", no_argument, 0, 'p'}, diff --git a/src/pacman/query.c b/src/pacman/query.c index 398adac4..2736672c 100644 --- a/src/pacman/query.c +++ b/src/pacman/query.c @@ -380,6 +380,10 @@ 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)) { return 0;