IMAP clients (such as webmail) use folders to mark messages as junk
etc., some even to mark messages as trash ("move to trash"). Such a
change is reported by notmuch as a rename; the message is not tagged
with new.tags since it is not new, so that there is no way to act upon a
rename.
Introduce new.rename_tags (default: not set) which are added by `notmuch
new` to renamed messages. This allows to act upon renames, e.g. to keep
the IMAP folder structure in sync with tags with a tool like `afew` or
homecooked scripts simply by filtering for this tag in the same ways as
one would filter for new messages using new.tags.
Signed-off-by: Michael J Gruber
---
Changed since v1:
- acted upon review comments (blank line, _thaw position)
- added 3 tests (mv, cp, cp-rm)
- treat copies as renames, too
The reasoning behind the latter is: If you use a mapping between folders
and tags, then a copy to an additional location should alert the
"mapper" to update that mapping; that's what the rename tag is for.
Maybe it should be named "renew" after all? But it's just the
folder/label name that is/needs to be renewed, nothing else about the
message.
Interdiff against v1:
diff --git a/notmuch-new.c b/notmuch-new.c
index e6d3dc82..e893fa21 100644
--- a/notmuch-new.c
+++ b/notmuch-new.c
@@ -401,6 +401,13 @@ add_file (notmuch_database_t *notmuch, const char
*filename,
break;
/* Non-fatal issues (go on to next file). */
case NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID:
+ notmuch_message_freeze (message);
+
+ for (tag = state->rename_tags; tag != NULL && *tag != NULL; tag++) {
+ notmuch_message_add_tag (message, *tag);
+ }
+
+ notmuch_message_thaw (message);
if (state->synchronize_flags)
notmuch_message_maildir_flags_to_tags (message);
break;
@@ -958,10 +965,9 @@ remove_filename (notmuch_database_t *notmuch,
notmuch_message_add_tag (message, *tag);
}
-
+ notmuch_message_thaw (message);
if (add_files_state->synchronize_flags == true)
notmuch_message_maildir_flags_to_tags (message);
- notmuch_message_thaw (message);
status = NOTMUCH_STATUS_SUCCESS;
} else if (status == NOTMUCH_STATUS_SUCCESS) {
add_files_state->removed_messages++;
diff --git a/test/T340-maildir-sync.sh b/test/T340-maildir-sync.sh
index 7fece5f2..44f32ad2 100755
--- a/test/T340-maildir-sync.sh
+++ b/test/T340-maildir-sync.sh
@@ -196,6 +196,36 @@ notmuch search 'subject:"File in new"' |
notmuch_search_sanitize > output
test_expect_equal "$(< output)" \
"thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; File in new/ (test
unread)"
+test_begin_subtest "Renamed files get default renamed tags"
+OLDCONFIG=$(notmuch config get new.rename_tags)
+notmuch config set new.rename_tags "renamed"
+mv $MAIL_DIR/new/file-in-new $MAIL_DIR/new/file-in-new-renamed
+notmuch new
+notmuch config set new.rename_tags $OLDCONFIG
+notmuch search 'subject:"File in new"' | notmuch_search_sanitize > output
+test_expect_equal "$(< output)" \
+"thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; File in new/ (renamed
test unread)"
+
+test_begin_subtest "Copied files do get new default renamed tags"
+OLDCONFIG=$(notmuch config get new.rename_tags)
+notmuch config set new.rename_tags "copied"
+cp $MAIL_DIR/new/file-in-new-renamed $MAIL_DIR/new/file-in-new-copied
+notmuch new
+notmuch config set new.rename_tags $OLDCONFIG
+notmuch search 'subject:"File in new"' | notmuch_search_sanitize > output
+test_expect_equal "$(< output)" \
+"thread:XXX 2001-01-05 [1/1(2)] Notmuch Test Suite; File in new/ (copied
renamed test unread)"
+
+test_begin_subtest "Renamed files (cp+rm) get default renamed tags"
+OLDCONFIG=$(notmuch config get new.rename_tags)
+notmuch config set new.rename_tags "cprm"
+rm $MAIL_DIR/new/file-in-new-renamed
+notmuch new
+notmuch config set new.rename_tags $OLDCONFIG
+notmuch search 'subject:"File in new"' | notmuch_search_sanitize > output
+test_expect_equal "$(< output)" \
+"thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; File in new/ (copied cprm
renamed test unread)"
+
for tag in draft flagged passed replied; do
test_begin_subtest "$tag is valid in new.tags"
OLDCONFIG=$(notmuch config get new.tags)
NEWS| 11 +++
doc/man1/notmuch-config.rst | 6 ++
notmuch-client.h| 8
notmuch-config.c| 26 ++
notmuch-new.c | 29 +
test/T340-maildir-sync.sh | 30 ++
6 files changed, 110 insertions(+)
diff --git a/NEWS b/NEWS
index 240d594b..e3b75e74 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,14 @@
+Notmuch 0.28 (UNRELEASED)
+=
+
+New command-line features
+-
+
+User-configurable tags for renamed messages
+
+ A new "