mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-24 20:08:10 +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"
|
#include "command-line-arguments.h"
|
||||||
extern const notmuch_opt_desc_t notmuch_shared_options [];
|
extern const notmuch_opt_desc_t notmuch_shared_options [];
|
||||||
void notmuch_process_shared_options (const char* subcommand_name);
|
void notmuch_process_shared_options (const char* subcommand_name);
|
||||||
|
int notmuch_minimal_options (const char* subcommand_name,
|
||||||
|
int argc, char **argv);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -872,8 +872,15 @@ int
|
||||||
notmuch_config_command (notmuch_config_t *config, int argc, char *argv[])
|
notmuch_config_command (notmuch_config_t *config, int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int ret;
|
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) {
|
if (argc < 1) {
|
||||||
fprintf (stderr, "Error: notmuch config requires at least one argument.\n");
|
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); \
|
chomp_newline (response); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
if (notmuch_minimal_options ("setup", argc, argv) < 0)
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
|
||||||
if (notmuch_config_is_new (config))
|
if (notmuch_config_is_new (config))
|
||||||
welcome_message_pre_setup ();
|
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[] = {
|
static command_t commands[] = {
|
||||||
{ NULL, notmuch_command, TRUE,
|
{ NULL, notmuch_command, TRUE,
|
||||||
|
@ -250,7 +272,15 @@ _help_for (const char *topic_name)
|
||||||
static int
|
static int
|
||||||
notmuch_help_command (unused (notmuch_config_t * config), int argc, char *argv[])
|
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) {
|
if (argc == 0) {
|
||||||
return _help_for (NULL);
|
return _help_for (NULL);
|
||||||
|
|
|
@ -114,6 +114,23 @@ random_utf8_string (void *ctx, size_t char_count)
|
||||||
return buf;
|
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
|
int
|
||||||
main (int argc, char **argv)
|
main (int argc, char **argv)
|
||||||
|
|
Loading…
Reference in a new issue