[PATCH v2] introduce new.rename_tags for renamed (moved) messages

David Bremner david at tethera.net
Tue Apr 2 18:28:48 PDT 2019

Michael J Gruber <git at grubix.eu> writes:

> Changed since v1:
> - acted upon review comments (blank line, _thaw position)
> - added 3 tests (mv, cp, cp-rm)
> - treat copies as renames, too

Apologies for taking so long to get back to this. As a general comment,
does this same tagging "hook" make sense for notmuch-insert as well?
That's not meant to delay this series, just food for thought.

> 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.

It _is_ confusing to use rename to refer to copies as well as actual
renames. I don't find "renew" better though. I wonder about something
like "new.new_path_tags". That's a bit weird with the repeated "new", I
grant you.   Maybe "new.path_change_tags"

> +**new.rename_tags**
> +    A list of tags that will be added to all messages which
> +    **notmuch new** identifies as renamed (moved).
> +
> +    Default: not set.
> +

Even if the name stays the same, you'll need to update the blurb to
mention copies.

> +void
> +notmuch_config_set_rename_tags (notmuch_config_t *config,
> +			     const char *rename_tags[],
> +			     size_t length);
> +

If this is only used in notmuch-config.c, I don't think it needs to
be exported (at least until they are needed). Of course it's also worth
asking if we want to call them notmuch-setup.c; I suspect not doing so
is OK, but I haven't checked in detail.

> diff --git a/test/T340-maildir-sync.sh b/test/T340-maildir-sync.sh

These tests don't really have to do with maildir syncing (in the sense
that notmuch uses the word), that's about syncing maildir flags to
notmuch tags. I think they'd be better in T050-new.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)"

Most of the newer tests use the pattern

thread:XXX   2001-01-05 [1/1] Notmuch Test Suite; File in new/ (renamed test unread)
test_expect_equal_file EXPECTED output

we also mainly use OUTPUT for the file, and $output as a variable
containing output.

Unfortunately the searches would need to be updated as well to work in

More information about the notmuch mailing list