The library already supports profile-based configuration resolution via the
NOTMUCH_PROFILE environment variable, and all three library entry points (open,
create, load) accept a profile parameter. However, the CLI never exposed this as
a command-line option.
Add --profile=PROFILE to the global options parsed in main(), before subcommand
dispatch. Like --config, this is intentionally kept out of
notmuch_shared_options so it is parsed once and does not appear in
per-subcommand help output. The profile value is passed to all three library
call sites and propagated to external commands via the NOTMUCH_PROFILE
environment variable.
Signed-off-by: inwit <inwit@sindominio.net>
---
notmuch.c | 21 ++++++++++++++++-----
1 file changed, 16 insertions(+), 5 deletions(-)
diff --git a/notmuch.c b/notmuch.c
index 814b9e42..eb03361d 100644
--- a/notmuch.c
+++ b/notmuch.c
@@ -54,6 +54,7 @@ notmuch_exit_if_unmatched_db_uuid (notmuch_database_t *notmuch);
static bool print_version = false, print_help = false;
static const char *notmuch_requested_db_uuid = NULL;
+static const char *notmuch_requested_profile = NULL;
static int query_syntax = NOTMUCH_QUERY_SYNTAX_XAPIAN;
const notmuch_opt_desc_t notmuch_shared_options [] = {
@@ -429,7 +430,8 @@ notmuch_command (notmuch_database_t *notmuch,
* false on errors.
*/
static bool
-try_external_command (const char *config_file_name, char *argv[])
+try_external_command (const char *config_file_name, const char *profile,
+ char *argv[])
{
char *old_argv0 = argv[0];
bool ret = true;
@@ -441,6 +443,13 @@ try_external_command (const char *config_file_name, char *argv[])
}
}
+ if (profile) {
+ if (setenv ("NOTMUCH_PROFILE", profile, 1)) {
+ perror ("setenv");
+ exit (1);
+ }
+ }
+
argv[0] = talloc_asprintf (NULL, "notmuch-%s", old_argv0);
/*
@@ -474,6 +483,7 @@ main (int argc, char *argv[])
notmuch_opt_desc_t options[] = {
{ .opt_string = &config_file_name, .name = "config", .allow_empty = TRUE },
+ { .opt_string = ¬much_requested_profile, .name = "profile" },
{ .opt_inherit = notmuch_shared_options },
{ }
};
@@ -500,7 +510,8 @@ main (int argc, char *argv[])
/* if command->function is NULL, try external command */
if (! command || ! command->function) {
/* This won't return if the external command is found. */
- if (try_external_command (config_file_name, argv + opt_index))
+ if (try_external_command (config_file_name, notmuch_requested_profile,
+ argv + opt_index))
fprintf (stderr, "Error: Unknown command '%s' (see \"notmuch help\")\n",
command_name);
ret = EXIT_FAILURE;
@@ -521,7 +532,7 @@ main (int argc, char *argv[])
if (command->mode & NOTMUCH_COMMAND_DATABASE_CREATE) {
status = notmuch_database_create_with_config (NULL,
config_file_name,
- NULL,
+ notmuch_requested_profile,
¬much,
&status_string);
if (status && status != NOTMUCH_STATUS_DATABASE_EXISTS) {
@@ -541,7 +552,7 @@ main (int argc, char *argv[])
status = notmuch_database_open_with_config (NULL,
mode,
config_file_name,
- NULL,
+ notmuch_requested_profile,
¬much,
&status_string);
if (status) {
@@ -560,7 +571,7 @@ main (int argc, char *argv[])
notmuch_status_t status;
status = notmuch_database_load_config (NULL,
config_file_name,
- NULL,
+ notmuch_requested_profile,
¬much,
&status_string);
if (status_string) {
--
2.53.0
_______________________________________________
notmuch mailing list -- notmuch@notmuchmail.org
To unsubscribe send an email to notmuch-leave@notmuchmail.org