This e-mail proposes a new notmuch subcommand "purge", which actually
removes explicitly deleted messages from the mailstore.
Notmuch currently never deletes mail, but notmuch-emacs makes it easy to
tag mail with "deleted" (via the "d") key, and "notmuch setup"
automatically adds "deleted" to the search.exclude_tags setting.
Users typically do actually want to delete messages, and they want them
gone from their filesystem and from the index.
while everyone who has used notmuch for a while probably has a clever
way of doing this, those techniques are all probably slightly different
(and possibly buggy), and the cognitive burden of figuring out how to do
this sensibly for new users seems like something we should avoid.
So i'm proposing "notmuch purge", which could be something as simple as
the equivalent of:
notmuch search --output=files --format=text0 tag:deleted | \
xargs --null --no-run-if-empty rm && \
notmuch new --no-hooks
(credit for the pipeline above goes to anarcat, in Cc; i added the
"notmuch new --no-hooks" part, because i would want the items gone from
the db as well)
If i was to implement this, i'd probably implement it directly in C, not
as a shell script, because this lets us drop messages from the db as we
unlink() the files.
Inevitably, someone will come up with some more clever
options/generalizations (i can already think of at least one), but if we
have a particular implementation to hang these proposals on, it should
help us to build something sensibly robust with a wider consensus, and
new users can pick up and use that functionality easily/safely/with
confidence.
I note that this is a divergence from the historical expectation of
having all "notmuch" subcommands not directly tamper with the
mailstore. I think given the context that divergence is OK.
Any objections to this approach?
--dkg