summaryrefslogtreecommitdiff
path: root/src/pacman/pacman.c
diff options
context:
space:
mode:
authorAllan McRae <allan@archlinux.org>2015-06-17 23:56:21 +1000
committerAllan McRae <allan@archlinux.org>2015-07-15 10:57:30 +1000
commit5782b8356c9b9d2c5e21694de22b1441277574b7 (patch)
tree59e279a33db5a46f21deefd15d962c882a78d7eb /src/pacman/pacman.c
parente49abc9860cfe9470a5828d3bb0ad38fd57a0fad (diff)
downloadpacman-5782b8356c9b9d2c5e21694de22b1441277574b7.tar.xz
Prototype pacman files database operations
Add the -F/--files operations, -s/--sync support and nd provide dummy functions for -s/--search, -l/-list and -o/--owns. Signed-off-by: Allan McRae <allan@archlinux.org>
Diffstat (limited to 'src/pacman/pacman.c')
-rw-r--r--src/pacman/pacman.c64
1 files changed, 63 insertions, 1 deletions
diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c
index 764193e6..951d628c 100644
--- a/src/pacman/pacman.c
+++ b/src/pacman/pacman.c
@@ -110,6 +110,7 @@ static void usage(int op, const char * const myname)
printf(" %s {-h --help}\n", myname);
printf(" %s {-V --version}\n", myname);
printf(" %s {-D --database} <%s> <%s>\n", myname, str_opt, str_pkg);
+ printf(" %s {-F --files} [%s] [%s]\n", myname, str_opt, str_pkg);
printf(" %s {-Q --query} [%s] [%s]\n", myname, str_opt, str_pkg);
printf(" %s {-R --remove} [%s] <%s>\n", myname, str_opt, str_pkg);
printf(" %s {-S --sync} [%s] [%s]\n", myname, str_opt, str_pkg);
@@ -173,6 +174,12 @@ static void usage(int op, const char * const myname)
} else if(op == PM_OP_DEPTEST) {
printf("%s: %s {-T --deptest} [%s] [%s]\n", str_usg, myname, str_opt, str_pkg);
printf("%s:\n", str_opt);
+ } else if(op == PM_OP_FILES) {
+ addlist(_(" -l, --list list the files owned by the queried package\n"));
+ addlist(_(" -o, --owns <file> query the package that owns <file>\n"));
+ addlist(_(" -s, --search <regex> search package file names for matching strings\n"));
+ addlist(_(" -y, --refresh download fresh package databases from the server\n"
+ " (-yy to force a refresh even if up to date)\n"));
}
switch(op) {
case PM_OP_SYNC:
@@ -363,6 +370,9 @@ static int parsearg_op(int opt, int dryrun)
case 'D':
if(dryrun) break;
config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_DATABASE); break;
+ case 'F':
+ if(dryrun) break;
+ config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_FILES); break;
case 'Q':
if(dryrun) break;
config->op = (config->op != PM_OP_MAIN ? 0 : PM_OP_QUERY); break;
@@ -755,6 +765,48 @@ static void checkargs_upgrade(void)
"--asdeps", "--asexplicit");
}
+static int parsearg_files(int opt)
+{
+ if(parsearg_trans(opt) == 0) {
+ return 0;
+ }
+ switch(opt) {
+ case OP_OWNS:
+ case 'o':
+ config->op_q_owns = 1;
+ break;
+ case OP_LIST:
+ case 'l':
+ config->op_q_list = 1;
+ break;
+ case OP_SEARCH:
+ case 's':
+ config->op_s_search = 1;
+ break;
+ case OP_REFRESH:
+ case 'y':
+ (config->op_s_sync)++;
+ break;
+ case OP_QUIET:
+ case 'q':
+ config->quiet = 1;
+ break;
+ default:
+ return 1;
+ }
+ return 0;
+}
+
+static void checkargs_files(void)
+{
+ if(config->op_q_owns) {
+ invalid_opt(config->op_q_list, "--owns", "--list");
+ invalid_opt(config->op_q_search, "--owns", "--search");
+ } else if(config->op_q_list) {
+ invalid_opt(config->op_q_search, "--list", "--search");
+ }
+}
+
static int parsearg_sync(int opt)
{
if(parsearg_upgrade(opt) == 0) {
@@ -847,10 +899,11 @@ static int parseargs(int argc, char *argv[])
int opt;
int option_index = 0;
int result;
- const char *optstring = "DQRSTUVb:cdefghiklmnopqr:stuvwy";
+ const char *optstring = "DFQRSTUVb:cdefghiklmnopqr:stuvwy";
static const struct option opts[] =
{
{"database", no_argument, 0, 'D'},
+ {"files", no_argument, 0, 'F'},
{"query", no_argument, 0, 'Q'},
{"remove", no_argument, 0, 'R'},
{"sync", no_argument, 0, 'S'},
@@ -964,6 +1017,9 @@ static int parseargs(int argc, char *argv[])
case PM_OP_UPGRADE:
result = parsearg_upgrade(opt);
break;
+ case PM_OP_FILES:
+ result = parsearg_files(opt);
+ break;
case PM_OP_DEPTEST:
default:
result = 1;
@@ -1012,6 +1068,9 @@ static int parseargs(int argc, char *argv[])
case PM_OP_UPGRADE:
checkargs_upgrade();
break;
+ case PM_OP_FILES:
+ checkargs_files();
+ break;
default:
break;
}
@@ -1238,6 +1297,9 @@ int main(int argc, char *argv[])
case PM_OP_DEPTEST:
ret = pacman_deptest(pm_targets);
break;
+ case PM_OP_FILES:
+ ret = pacman_files(pm_targets);
+ break;
default:
pm_printf(ALPM_LOG_ERROR, _("no operation specified (use -h for help)\n"));
ret = EXIT_FAILURE;