Re: [notmuch] Introducing notmuchsync

Subject: Re: [notmuch] Introducing notmuchsync

Date: Mon, 01 Mar 2010 09:57:26 +0100

To: Carl Worth, Sebastian Spaeth, notmuch@notmuchmail.org

Cc:

From: Michal Sojka


On Wed, 24 Feb 2010 10:19:06 -0800, Carl Worth <cworth@cworth.org> wrote:
> Elsewhere in the thread Jameson Rollins wrote:
> > I should have mentioned in my previous mail that I think this tool is
> > a great idea, and I plan on using it.  I just hope that all of it's
> > functionality will be integrated directly into notmuch itself.
> 
> I think that's the open question still. How much of this kind of
> functionality do we integrate into notmuch itself. I don't know the
> answer to that question yet, but I'm quite happy to see people
> experimenting with doing scripts like this on top of notmuch already.

Hi, when you are on this topic, I'll put my two cents in. Currently
notmuch works only with mail-store comprised of files. People want to
work with their mails on multiple computers so there are several
ideas/solutions how to achieve that. Notmuchsync, which plays well with
offlineimap, is one of them. Another idea is Git based mail-store, which
I would really like to have.

If we want to make notmuch work with Git-based mail-store, it will be
necessary to make the interface between notmuch core and mail-store
handling code a bit more abstract so that it will be possible to
configure mail-store type to be used.

This abstract mail-store interface will contain methods for the
following operations:
1. read mail identified by a path from mail-store
   (current notmuch uses fread() for this, for git this will be
   something like system("git cat-file ..."))
2. get the list of new mails which need to be indexed
   (current notmuch does recursive file traversal, for git-based store
   it will be something like system("git diff-tree --name-status ...")
3. add/remove tags for a given message (this will be NULL for current
   notmuch functionality)

This way the mail-store will be able to store both mails and
corresponding tags and in case of git, it will be easy to synchronize
mail-stores on multiple computers.

Now, if we have this, it would be very easy to add support for
Maildir-based mail-store. The implementation of the first two methods
would be the same as what is currently in notmuch and the third method
would rename files in mailstore if certain tags (such as unread) are
added or removed. In case of rename, notmuch database would be
immediately updated to reflect the change.

So to summarize, I think there should be an abstract layer for
handling different types of mail-store. I can see at least three
possible implementations of this abstract interface: 1) immutable
mail-store (as currently implemented in notmuch) 2) Maildir-based
mail-store for limited synchronization with other Maildir tools and 
3) git-based mail-store for full synchronization.

I've already started working on this, but I'm still in the state where I
mainly study how notmuch works in order not to break its current
functionality.

I'd like to hear what others think about this idea.

Bye
Michal

Thread: