cli: bail out and propagate tagging errors in notmuch tag
authorJani Nikula <jani@nikula.org>
Tue, 8 Jan 2013 21:41:54 +0000 (23:41 +0200)
committerDavid Bremner <bremner@debian.org>
Thu, 10 Jan 2013 03:08:48 +0000 (23:08 -0400)
Checking and propagating tag_op_list_apply() errors is especially
important with batch tagging, as the processing of the batch input
would not stop otherwise. Additionally this sets the exit code, which
is useful in scripts.

Amended by: David Bremner

notmuch-tag.c

index 4272426638a9132c72959b5770b348e2ea336b8d..6408babb5f1daf9ddd088f23047399c488942d06 100644 (file)
@@ -97,6 +97,7 @@ tag_query (void *ctx, notmuch_database_t *notmuch, const char *query_string,
     notmuch_query_t *query;
     notmuch_messages_t *messages;
     notmuch_message_t *message;
+    int ret = 0;
 
     /* Optimize the query so it excludes messages that already have
      * the specified set of tags. */
@@ -119,13 +120,15 @@ tag_query (void *ctx, notmuch_database_t *notmuch, const char *query_string,
         notmuch_messages_valid (messages) && ! interrupted;
         notmuch_messages_move_to_next (messages)) {
        message = notmuch_messages_get (messages);
-       tag_op_list_apply (message, tag_ops, flags | TAG_FLAG_PRE_OPTIMIZED);
+       ret = tag_op_list_apply (message, tag_ops, flags | TAG_FLAG_PRE_OPTIMIZED);
        notmuch_message_destroy (message);
+       if (ret != NOTMUCH_STATUS_SUCCESS)
+           break;
     }
 
     notmuch_query_destroy (query);
 
-    return interrupted;
+    return ret || interrupted;
 }
 
 static int