diff options
Diffstat (limited to 'sindex.c')
-rw-r--r-- | sindex.c | 21 |
1 files changed, 17 insertions, 4 deletions
@@ -101,11 +101,13 @@ static void show_help(int ret) "\n" "Options:\n" " -D, --database=FILE Specify database file (default: %2$s);\n" + " -B, --basedir=DIR Define project top directory (default is the current directory);\n" " -v, --verbose Show information about what is being done;\n" " -h, --help Show this text and exit.\n" "\n" "Environment:\n" " SINDEX_DATABASE Database file location.\n" + " SINDEX_BASEDIR Project top directory.\n" "\n" "Report bugs to authors.\n" "\n", @@ -125,9 +127,6 @@ static void show_help_add(int ret) " -v, --verbose Show information about what is being done;\n" " -h, --help Show this text and exit.\n" "\n" - "Environment:\n" - " SINDEX_BASEDIRE Project top directory.\n" - "\n" "Report bugs to authors.\n" "\n", progname); @@ -251,21 +250,26 @@ static void parse_cmdline(int argc, char **argv) { static const struct option long_options[] = { { "database", required_argument, NULL, 'D' }, + { "basedir", required_argument, NULL, 'B' }, { "verbose", no_argument, NULL, 'v' }, { "help", no_argument, NULL, 'h' }, { NULL } }; int c; + char *basedir = getenv("SINDEX_BASEDIR"); char *env; if ((env = getenv("SINDEX_DATABASE")) != NULL) sindex_dbfile = env; - while ((c = getopt_long(argc, argv, "+D:vh", long_options, NULL)) != -1) { + while ((c = getopt_long(argc, argv, "+B:D:vh", long_options, NULL)) != -1) { switch (c) { case 'D': sindex_dbfile = optarg; break; + case 'B': + basedir = optarg; + break; case 'v': sindex_verbose++; break; @@ -278,6 +282,12 @@ static void parse_cmdline(int argc, char **argv) message("command required"); show_usage(); } + + if (basedir) { + if (!realpath(basedir, cwd)) + sindex_error(1, errno, "unable to get project base directory"); + n_cwd = strlen(cwd); + } } static void parse_cmdline_add(int argc, char **argv) @@ -1016,6 +1026,9 @@ static void command_search(int argc, char **argv) char *dberr = NULL; sqlite3_str *query = sqlite3_str_new(sindex_db); + if (chdir(cwd) < 0) + sindex_error(1, errno, "unable to change directory: %s", cwd); + if (query_appendf(query, "SELECT" " file.name," |