mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-21 18:38:08 +01:00
cli: add standard option processing to config, help and setup
In particular this fixes a recently encountered bug where the "--config" argument to "notmuch setup" is silently ignored, which the unpleasant consequence of overwriting the users config file.
This commit is contained in:
parent
0018a8d787
commit
447ad6b498
5 changed files with 61 additions and 2 deletions
|
@ -468,4 +468,6 @@ notmuch_database_dump (notmuch_database_t *notmuch,
|
|||
#include "command-line-arguments.h"
|
||||
extern const notmuch_opt_desc_t notmuch_shared_options [];
|
||||
void notmuch_process_shared_options (const char* subcommand_name);
|
||||
int notmuch_minimal_options (const char* subcommand_name,
|
||||
int argc, char **argv);
|
||||
#endif
|
||||
|
|
|
@ -872,8 +872,15 @@ int
|
|||
notmuch_config_command (notmuch_config_t *config, int argc, char *argv[])
|
||||
{
|
||||
int ret;
|
||||
int opt_index;
|
||||
|
||||
argc--; argv++; /* skip subcommand argument */
|
||||
opt_index = notmuch_minimal_options ("config", argc, argv);
|
||||
if (opt_index < 0)
|
||||
return EXIT_FAILURE;
|
||||
|
||||
/* skip at least subcommand argument */
|
||||
argc-= opt_index;
|
||||
argv+= opt_index;
|
||||
|
||||
if (argc < 1) {
|
||||
fprintf (stderr, "Error: notmuch config requires at least one argument.\n");
|
||||
|
|
|
@ -145,6 +145,9 @@ notmuch_setup_command (notmuch_config_t *config,
|
|||
chomp_newline (response); \
|
||||
} while (0)
|
||||
|
||||
if (notmuch_minimal_options ("setup", argc, argv) < 0)
|
||||
return EXIT_FAILURE;
|
||||
|
||||
if (notmuch_config_is_new (config))
|
||||
welcome_message_pre_setup ();
|
||||
|
||||
|
|
32
notmuch.c
32
notmuch.c
|
@ -71,6 +71,28 @@ notmuch_process_shared_options (const char *subcommand_name) {
|
|||
}
|
||||
}
|
||||
|
||||
/* This is suitable for subcommands that do not actually open the
|
||||
* database.
|
||||
*/
|
||||
int notmuch_minimal_options (const char *subcommand_name,
|
||||
int argc, char **argv)
|
||||
{
|
||||
int opt_index;
|
||||
|
||||
notmuch_opt_desc_t options[] = {
|
||||
{ NOTMUCH_OPT_INHERIT, (void *) ¬much_shared_options, NULL, 0, 0 },
|
||||
{ 0, 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
opt_index = parse_arguments (argc, argv, options, 1);
|
||||
|
||||
if (opt_index < 0)
|
||||
return -1;
|
||||
|
||||
/* We can't use argv here as it is sometimes NULL */
|
||||
notmuch_process_shared_options (subcommand_name);
|
||||
return opt_index;
|
||||
}
|
||||
|
||||
static command_t commands[] = {
|
||||
{ NULL, notmuch_command, TRUE,
|
||||
|
@ -250,7 +272,15 @@ _help_for (const char *topic_name)
|
|||
static int
|
||||
notmuch_help_command (unused (notmuch_config_t * config), int argc, char *argv[])
|
||||
{
|
||||
argc--; argv++; /* Ignore "help" */
|
||||
int opt_index;
|
||||
|
||||
opt_index = notmuch_minimal_options ("help", argc, argv);
|
||||
if (opt_index < 0)
|
||||
return EXIT_FAILURE;
|
||||
|
||||
/* skip at least subcommand argument */
|
||||
argc-= opt_index;
|
||||
argv+= opt_index;
|
||||
|
||||
if (argc == 0) {
|
||||
return _help_for (NULL);
|
||||
|
|
|
@ -114,6 +114,23 @@ random_utf8_string (void *ctx, size_t char_count)
|
|||
return buf;
|
||||
}
|
||||
|
||||
/* stubs since we cannot link with notmuch.o */
|
||||
const notmuch_opt_desc_t notmuch_shared_options[] = {
|
||||
{ 0, 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
void
|
||||
notmuch_process_shared_options (unused (const char *dummy))
|
||||
{
|
||||
}
|
||||
|
||||
int
|
||||
notmuch_minimal_options (unused (const char *subcommand),
|
||||
unused (int argc),
|
||||
unused (char **argv))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
|
|
Loading…
Reference in a new issue