From 733ccfabca350f65a1d0ba1f64792a8a436da273 Mon Sep 17 00:00:00 2001 From: Jani Nikula Date: Sat, 14 Oct 2017 16:15:43 +0300 Subject: [PATCH] cli: allow empty strings for notmuch insert --folder argument Now that it's easy to add argument specific modifiers in opt descriptions, add a new .allow_empty field to allow empty strings for individual string arguments while retaining strict checks elsewhere. Use this for notmuch insert --folder, where the empty string means top level folder. --- command-line-arguments.c | 2 +- command-line-arguments.h | 3 +++ doc/man1/notmuch-insert.rst | 3 ++- notmuch-insert.c | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/command-line-arguments.c b/command-line-arguments.c index 1ff5aae5..db73ca5e 100644 --- a/command-line-arguments.c +++ b/command-line-arguments.c @@ -81,7 +81,7 @@ _process_string_arg (const notmuch_opt_desc_t *arg_desc, char next, const char * fprintf (stderr, "Option \"%s\" needs a string argument.\n", arg_desc->name); return false; } - if (arg_str[0] == '\0') { + if (arg_str[0] == '\0' && ! arg_desc->allow_empty) { fprintf (stderr, "String argument for option \"%s\" must be non-empty.\n", arg_desc->name); return false; } diff --git a/command-line-arguments.h b/command-line-arguments.h index 76ca4dcb..c0228f7c 100644 --- a/command-line-arguments.h +++ b/command-line-arguments.h @@ -32,6 +32,9 @@ typedef struct notmuch_opt_desc { /* Optional, if non-NULL, set to true if the option is present. */ bool *present; + /* Optional, allow empty strings for opt_string. */ + bool allow_empty; + /* Must be set for opt_keyword and opt_flags. */ const struct notmuch_keyword *keywords; } notmuch_opt_desc_t; diff --git a/doc/man1/notmuch-insert.rst b/doc/man1/notmuch-insert.rst index e2bf37d0..c500b251 100644 --- a/doc/man1/notmuch-insert.rst +++ b/doc/man1/notmuch-insert.rst @@ -34,7 +34,8 @@ Supported options for **insert** include ``--folder=<``\ folder\ **>** Deliver the message to the specified folder, relative to the top-level directory given by the value of **database.path**. The - default is to deliver to the top-level directory. + default is the empty string, which means delivering to the + top-level directory. ``--create-folder`` Try to create the folder named by the ``--folder`` option, if it diff --git a/notmuch-insert.c b/notmuch-insert.c index 4d6b0a7f..bb835ba9 100644 --- a/notmuch-insert.c +++ b/notmuch-insert.c @@ -464,7 +464,7 @@ notmuch_insert_command (notmuch_config_t *config, int argc, char *argv[]) unsigned int i; notmuch_opt_desc_t options[] = { - { .opt_string = &folder, .name = "folder" }, + { .opt_string = &folder, .name = "folder", .allow_empty = true }, { .opt_bool = &create_folder, .name = "create-folder" }, { .opt_bool = &keep, .name = "keep" }, { .opt_bool = &no_hooks, .name = "no-hooks" }, -- 2.43.0