summaryrefslogtreecommitdiff
path: root/pcr/expac-relative/add-options-dbpath-and-config.patch
diff options
context:
space:
mode:
Diffstat (limited to 'pcr/expac-relative/add-options-dbpath-and-config.patch')
-rw-r--r--pcr/expac-relative/add-options-dbpath-and-config.patch196
1 files changed, 196 insertions, 0 deletions
diff --git a/pcr/expac-relative/add-options-dbpath-and-config.patch b/pcr/expac-relative/add-options-dbpath-and-config.patch
new file mode 100644
index 000000000..100fbb31d
--- /dev/null
+++ b/pcr/expac-relative/add-options-dbpath-and-config.patch
@@ -0,0 +1,196 @@
+From cc0135f30893b719d34845c088e215900962d8dd Mon Sep 17 00:00:00 2001
+From: Esteban Carnevale <alfplayer@mailoo.org>
+Date: Sat, 8 Feb 2014 17:49:10 -0300
+Subject: [PATCH] add options dbpath and config
+
+---
+ README.pod | 12 +++++++++++
+ expac.c | 72 +++++++++++++++++++++++++++++++++++++++++---------------------
+ 2 files changed, 60 insertions(+), 24 deletions(-)
+
+diff --git a/README.pod b/README.pod
+index 8e51329..ba27281 100644
+--- a/README.pod
++++ b/README.pod
+@@ -24,6 +24,18 @@ a query string (in the case of a search), or in repo/package syntax when the
+
+ =over 4
+
++=item B<-b, --dbpath> <path>
++
++Specify an alternative database location (a typical default is
++/var/lib/pacman). This should not be used unless you know what you are doing.
++NOTE: if specified, this is an absolute path and the root path is not
++automatically prepended.
++
++=item B<-c, --config> <file>
++
++Specify an alternate configuration file (a typical default is
++/etc/pacman.conf).
++
+ =item B<-Q, --query>
+
+ Search the local database for provided targets. This is the default behavior.
+diff --git a/expac.c b/expac.c
+index ae3ef6d..3f9b0ba 100644
+--- a/expac.c
++++ b/expac.c
+@@ -36,6 +36,8 @@
+ #include <time.h>
+
+ #define DEFAULT_DELIM "\n"
++#define DEFAULT_DBPATH "/var/lib/pacman"
++#define DEFAULT_CONFIGFILE "/etc/pacman.conf"
+ #define DEFAULT_LISTDELIM " "
+ #define DEFAULT_TIMEFMT "%c"
+ #define FORMAT_TOKENS "BCDEGLMNOPRSVabdhmnprsuvw%"
+@@ -58,10 +60,13 @@ bool local = false;
+ bool groups = false;
+ bool localpkg = false;
+ char humansize = 'B';
++char dbtype = NULL;
+ const char *format = NULL;
+ const char *timefmt = NULL;
+ const char *listdelim = NULL;
+ const char *delim = NULL;
++const char *dbpath = NULL;
++const char *configfile = NULL;
+ int pkgcounter = 0;
+
+ typedef const char *(*extractfn)(void*);
+@@ -154,7 +159,7 @@ static alpm_handle_t *alpm_init(void) {
+ char line[PATH_MAX];
+ char *ptr, *section = NULL;
+
+- handle = alpm_initialize("/", "/var/lib/pacman", &alpm_errno);
++ handle = alpm_initialize("/", dbpath, &alpm_errno);
+ if (!handle) {
+ alpm_strerror(alpm_errno);
+ return NULL;
+@@ -162,9 +167,9 @@ static alpm_handle_t *alpm_init(void) {
+
+ db_local = alpm_get_localdb(handle);
+
+- fp = fopen("/etc/pacman.conf", "r");
++ fp = fopen(configfile, "r");
+ if (!fp) {
+- perror("fopen: /etc/pacman.conf");
++ fprintf(stderr, "fopen:%s\n", configfile);
+ return handle;
+ }
+
+@@ -209,6 +214,8 @@ static void usage(void) {
+ " Options:\n"
+ " -Q, --local search local DB (default)\n"
+ " -S, --sync search sync DBs\n"
++ " -b, --dbpath <path> alternative database location (default: /var/lib/pacman)\n"
++ " -c, --config <path> alternative configuration file (default: /etc/pacman.conf)\n"
+ " -s, --search search for matching regex\n"
+ " -g, --group return packages matching targets as groups\n"
+ " -H, --humansize <size> format package sizes in SI units (default: bytes)\n"
+@@ -222,41 +229,43 @@ static void usage(void) {
+ "For more details see expac(1).\n");
+ }
+
+-static int parse_options(int argc, char *argv[], alpm_handle_t *handle) {
++static int parse_options(int argc, char *argv[]) {
+ int opt, option_index = 0;
+ const char *i;
+
+ static struct option opts[] = {
+- {"readone", no_argument, 0, '1'},
+- {"delim", required_argument, 0, 'd'},
+- {"listdelim", required_argument, 0, 'l'},
+- {"group", required_argument, 0, 'g'},
+- {"help", no_argument, 0, 'h'},
+- {"file", no_argument, 0, 'p'},
+- {"humansize", required_argument, 0, 'H'},
+- {"query", no_argument, 0, 'Q'},
+- {"sync", no_argument, 0, 'S'},
+- {"search", no_argument, 0, 's'},
+- {"timefmt", required_argument, 0, 't'},
+- {"verbose", no_argument, 0, 'v'},
++ {"readone", no_argument, 0, '1'},
++ {"delim", required_argument, 0, 'd'},
++ {"dbpath", required_argument, 0, 'b'},
++ {"configfile", required_argument, 0, 'c'},
++ {"listdelim", required_argument, 0, 'l'},
++ {"group", required_argument, 0, 'g'},
++ {"help", no_argument, 0, 'h'},
++ {"file", no_argument, 0, 'p'},
++ {"humansize", required_argument, 0, 'H'},
++ {"query", no_argument, 0, 'Q'},
++ {"sync", no_argument, 0, 'S'},
++ {"search", no_argument, 0, 's'},
++ {"timefmt", required_argument, 0, 't'},
++ {"verbose", no_argument, 0, 'v'},
+ {0, 0, 0, 0}
+ };
+
+- while (-1 != (opt = getopt_long(argc, argv, "1l:d:gH:hf:pQSst:v", opts, &option_index))) {
++ while (-1 != (opt = getopt_long(argc, argv, "1l:d:b:c:gH:hf:pQSst:v", opts, &option_index))) {
+ switch (opt) {
+ case 'S':
+- if (dblist) {
++ if (dbtype) {
+ fprintf(stderr, "error: can only select one repo option (use -h for help)\n");
+ return 1;
+ }
+- dblist = alpm_list_copy(alpm_get_syncdbs(handle));
++ dbtype = 's';
+ break;
+ case 'Q':
+- if (dblist) {
++ if (dbtype) {
+ fprintf(stderr, "error: can only select one repo option (use -h for help)\n");
+ return 1;
+ }
+- dblist = alpm_list_add(dblist, db_local);
++ dbtype = 'q';
+ local = true;
+ break;
+ case '1':
+@@ -265,6 +274,12 @@ static int parse_options(int argc, char *argv[], alpm_handle_t *handle) {
+ case 'd':
+ delim = optarg;
+ break;
++ case 'b':
++ dbpath = optarg;
++ break;
++ case 'c':
++ configfile = optarg;
++ break;
+ case 'g':
+ groups = true;
+ break;
+@@ -719,14 +734,23 @@ int main(int argc, char *argv[]) {
+ alpm_handle_t *handle;
+ alpm_list_t *results = NULL, *i;
+
++ ret = parse_options(argc, argv);
++ if (ret != 0) {
++ goto finish;
++ }
++
++ dbpath = dbpath ? dbpath : DEFAULT_DBPATH;
++ configfile = configfile ? configfile : DEFAULT_CONFIGFILE;
++
+ handle = alpm_init();
+ if (!handle) {
+ return ret;
+ }
+
+- ret = parse_options(argc, argv, handle);
+- if (ret != 0) {
+- goto finish;
++ if (dbtype == 's') {
++ dblist = alpm_list_copy(alpm_get_syncdbs(handle));
++ } else if (dbtype == 'q') {
++ dblist = alpm_list_add(dblist, db_local);
+ }
+
+ /* ensure sane defaults */
+--
+1.9.0
+
+