cli/insert: add post-insert hook

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.
This commit is contained in:
Jani Nikula 2014-09-28 17:40:59 +03:00 committed by David Bremner
parent 50eedb48ec
commit 19c09d870f
3 changed files with 27 additions and 0 deletions

View file

@ -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 (it has same Message-ID), it will be added to the maildir folder and
notmuch database, but the tags will not be changed. 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. Option arguments must appear before any tag operation arguments.
Supported options for **insert** include Supported options for **insert** include
@ -44,6 +47,9 @@ Supported options for **insert** include
fails. Ignore these errors and return exit status 0 to fails. Ignore these errors and return exit status 0 to
indicate succesful mail delivery. indicate succesful mail delivery.
``--no-hooks``
Prevent hooks from being run.
EXIT STATUS 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 maildir flags. The ``--keep`` option may be used to settle for
successful message file delivery. successful message file delivery.
The exit status of the **post-insert** hook does not affect the exit
status of the **insert** command.
SEE ALSO SEE ALSO
======== ========

View file

@ -35,6 +35,17 @@ The currently available hooks are described below.
Typically this hook is used to perform additional query-based Typically this hook is used to perform additional query-based
tagging on the imported messages. 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 SEE ALSO
======== ========

View file

@ -454,6 +454,7 @@ notmuch_insert_command (notmuch_config_t *config, int argc, char *argv[])
const char *folder = NULL; const char *folder = NULL;
notmuch_bool_t create_folder = FALSE; notmuch_bool_t create_folder = FALSE;
notmuch_bool_t keep = FALSE; notmuch_bool_t keep = FALSE;
notmuch_bool_t no_hooks = FALSE;
notmuch_bool_t synchronize_flags; notmuch_bool_t synchronize_flags;
const char *maildir; const char *maildir;
char *newpath; 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_STRING, &folder, "folder", 0, 0 },
{ NOTMUCH_OPT_BOOLEAN, &create_folder, "create-folder", 0, 0 }, { NOTMUCH_OPT_BOOLEAN, &create_folder, "create-folder", 0, 0 },
{ NOTMUCH_OPT_BOOLEAN, &keep, "keep", 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 } { 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; return status ? EXIT_FAILURE : EXIT_SUCCESS;
} }