From: David Bremner <brem...@unb.ca>

logging of tags is enabled by adding a stanza like

[log]
tags = /some/path/you/can/write/to

to your notmuch config.

Note that we intentionally do the logging after the database
transaction is finished.
---
 notmuch-tag.c |   31 +++++++++++++++++++++++++++++++
 1 files changed, 31 insertions(+), 0 deletions(-)

diff --git a/notmuch-tag.c b/notmuch-tag.c
index fd54bc7..f24d1e4 100644
--- a/notmuch-tag.c
+++ b/notmuch-tag.c
@@ -46,6 +46,9 @@ notmuch_tag_command (void *ctx, unused (int argc), unused 
(char *argv[]))
     notmuch_message_t *message;
     struct sigaction action;
     int i;
+    int log_fd = -1;
+    notmuch_bool_t enable_log = FALSE;
+    const char *log_path;
 
     /* Setup our handler for SIGINT */
     memset (&action, 0, sizeof (struct sigaction));
@@ -96,6 +99,17 @@ notmuch_tag_command (void *ctx, unused (int argc), unused 
(char *argv[]))
     if (config == NULL)
        return 1;
 
+    log_path = notmuch_config_get_log_path (config, "tags");
+
+    if (log_path != NULL) {
+      enable_log = TRUE;
+
+      log_fd = notmuch_log_open(log_path);
+
+      if (log_fd < 0)
+       return 1;
+    }
+
     notmuch = notmuch_database_open (notmuch_config_get_database_path (config),
                                     NOTMUCH_DATABASE_MODE_READ_WRITE);
     if (notmuch == NULL)
@@ -114,10 +128,15 @@ notmuch_tag_command (void *ctx, unused (int argc), unused 
(char *argv[]))
         notmuch_messages_valid (messages) && !interrupted;
         notmuch_messages_move_to_next (messages))
     {
+       const char *message_id = NULL;
        message = notmuch_messages_get (messages);
 
        notmuch_message_freeze (message);
 
+       if (enable_log)
+           message_id = talloc_strdup (ctx,
+                                       notmuch_message_get_message_id 
(message));
+
        for (i = 0; i < remove_tags_count; i++)
            notmuch_message_remove_tag (message,
                                        argv[remove_tags[i]] + 1);
@@ -128,6 +147,18 @@ notmuch_tag_command (void *ctx, unused (int argc), unused 
(char *argv[]))
        notmuch_message_thaw (message);
 
        notmuch_message_destroy (message);
+
+       if (enable_log) {
+           for (i = 0; i < remove_tags_count; i++)
+               notmuch_log_string_pair (ctx, log_fd,
+                                        message_id,
+                                        argv[remove_tags[i]]);
+
+           for (i = 0; i < add_tags_count; i++)
+               notmuch_log_string_pair (ctx, log_fd,
+                                        message_id,
+                                        argv[add_tags[i]]);
+       }
     }
 
     notmuch_query_destroy (query);
-- 
1.7.1

_______________________________________________
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch

Reply via email to