summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJani Nikula <jani@nikula.org>2017-10-14 16:15:43 +0300
committerDavid Bremner <david@tethera.net>2017-11-08 09:46:44 -0500
commit733ccfabca350f65a1d0ba1f64792a8a436da273 (patch)
tree602a83e0831b1ccd19d1a25c97fd34576481b7da
parent7ac96b149f5a0e5c03b64856d7c20789dab3c628 (diff)
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.
-rw-r--r--command-line-arguments.c2
-rw-r--r--command-line-arguments.h3
-rw-r--r--doc/man1/notmuch-insert.rst3
-rw-r--r--notmuch-insert.c2
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" },