Eric Wong <e...@80x24.org> wrote: > Konstantin Ryabitsev <konstan...@linuxfoundation.org> wrote: > > Nice, so eventually we should be able to specify the following instead of > > faking out a maildir? > > > > watch=mh:/var/spool/mlmmj/list.name/archive > > Yes, that's the plan.
Well, reading /usr/lib/python*/mailbox.py on my system makes me cry: def pack(self): """Re-name messages to eliminate numbering gaps. Invalidates keys.""" That's for the Python stdlib MH class where I was looking for a non-racy write implementation. And checking the nmh source[1] reveals packing happens there, too... Packing makes sense for a memory-efficient representation of .mh_sequences without resorting to a tree or hash table; but it invalidates `lei index' and forces -watch to do a full rescan if anybody uses pack. Ugh... Fortunately, this doesn't seem to be the default behavior of nmh (`nopack' appears to be the default). [1] https://git.savannah.gnu.org/git/nmh.git sbr/folder_pack.c > > > inotify|EVFILT_VNODE watches aren't supported, yet, either. At least lei should have a reasonably fast way to handle this using mail_sync.sqlite3 to compare SHA-(1|256) without having to decode MIME/QP/Base-64 to get comparisons... I suppose -watch needs to start using that, too... > > In the case of mlmmj it's sufficient to watch the > > /var/spool/mlmmj/list.name/index file for updates, but I don't know how well > > this lends itself to other implementations (I am not at all familiar with > > MH). > > Just watching the directory itself is sufficient (like Maildir) > and will report new files. We just have to check /\A[0-9]+\z/ At least mlmmj won't pack because it's an archive (or at least it shouldn't....)