[PATCH v2 3/3] cli/insert: add post-insert hook
Jani Nikula
jani at nikula.org
Sun Sep 28 07:40:59 PDT 2014
The post-new hook might no longer be needed or run very often if
notmuch insert is being used. Therefore a post-insert hook is needed
(arguably pre-insert not so much, so don't add one). Also add the
--no-hooks option to skip hooks.
---
doc/man1/notmuch-insert.rst | 9 +++++++++
doc/man5/notmuch-hooks.rst | 11 +++++++++++
notmuch-insert.c | 7 +++++++
3 files changed, 27 insertions(+)
diff --git a/doc/man1/notmuch-insert.rst b/doc/man1/notmuch-insert.rst
index e396f6cf2279..2c9c0d02c251 100644
--- a/doc/man1/notmuch-insert.rst
+++ b/doc/man1/notmuch-insert.rst
@@ -25,6 +25,9 @@ If the new message is a duplicate of an existing message in the database
(it has same Message-ID), it will be added to the maildir folder and
notmuch database, but the tags will not be changed.
+The **insert** command supports hooks. See **notmuch-hooks(5)** for
+more details on hooks.
+
Option arguments must appear before any tag operation arguments.
Supported options for **insert** include
@@ -44,6 +47,9 @@ Supported options for **insert** include
fails. Ignore these errors and return exit status 0 to
indicate succesful mail delivery.
+ ``--no-hooks``
+ Prevent hooks from being run.
+
EXIT STATUS
===========
@@ -54,6 +60,9 @@ indexing to Notmuch database, changing tags, and synchronizing tags to
maildir flags. The ``--keep`` option may be used to settle for
successful message file delivery.
+The exit status of the **post-insert** hook does not affect the exit
+status of the **insert** command.
+
SEE ALSO
========
diff --git a/doc/man5/notmuch-hooks.rst b/doc/man5/notmuch-hooks.rst
index 493abf20f003..f1c2528c5666 100644
--- a/doc/man5/notmuch-hooks.rst
+++ b/doc/man5/notmuch-hooks.rst
@@ -35,6 +35,17 @@ The currently available hooks are described below.
Typically this hook is used to perform additional query-based
tagging on the imported messages.
+ **post-insert**
+
+ This hook is invoked by the **insert** command after the
+ message has been delivered, added to the database, and initial
+ tags have been applied. The hook will not be run if there have
+ been any errors during the message delivery; what is regarded
+ as succesful delivery depends on the ``--keep`` option.
+
+ Typically this hook is used to perform additional query-based
+ tagging on the delivered messages.
+
SEE ALSO
========
diff --git a/notmuch-insert.c b/notmuch-insert.c
index 7074077ca699..e9d71efa1fb6 100644
--- a/notmuch-insert.c
+++ b/notmuch-insert.c
@@ -454,6 +454,7 @@ notmuch_insert_command (notmuch_config_t *config, int argc, char *argv[])
const char *folder = NULL;
notmuch_bool_t create_folder = FALSE;
notmuch_bool_t keep = FALSE;
+ notmuch_bool_t no_hooks = FALSE;
notmuch_bool_t synchronize_flags;
const char *maildir;
char *newpath;
@@ -464,6 +465,7 @@ notmuch_insert_command (notmuch_config_t *config, int argc, char *argv[])
{ NOTMUCH_OPT_STRING, &folder, "folder", 0, 0 },
{ NOTMUCH_OPT_BOOLEAN, &create_folder, "create-folder", 0, 0 },
{ NOTMUCH_OPT_BOOLEAN, &keep, "keep", 0, 0 },
+ { NOTMUCH_OPT_BOOLEAN, &no_hooks, "no-hooks", 'n', 0 },
{ NOTMUCH_OPT_END, 0, 0, 0, 0 }
};
@@ -565,5 +567,10 @@ notmuch_insert_command (notmuch_config_t *config, int argc, char *argv[])
}
}
+ if (! no_hooks && status == NOTMUCH_STATUS_SUCCESS) {
+ /* Ignore hook failures. */
+ notmuch_run_hook (db_path, "post-insert");
+ }
+
return status ? EXIT_FAILURE : EXIT_SUCCESS;
}
--
2.1.0
More information about the notmuch
mailing list