[ Sorry about the double-post. The backstory involves the indirect
interaction of Little Snitch and a snowblower.]
On 11 Jan 2014, at 8:49, Kee Hinckley wrote:
On Jan 11, 2014, at 2:31 AM, "Bill Cole"
<[email protected]> wrote:
On 3 Jan 2014, at 14:04, Benny Kjær Nielsen wrote:
On 3 Jan 2014, at 17:08, Kee Hinckley wrote:
Is there in fact an underlying IMAP command to move a folder
hierarchy (as opposed to rename)? Or if I tell MailMate to move a
folder, is it going to copy and delete?
It is going to be copy and delete. Many servers though do that just
as efficiently as if it was a move (but not all servers).
Does the IMAP RENAME command not actually work reliably to move
folders and their children?
http://tools.ietf.org/html/rfc3501#section-6.3.5 seems to say it
should.
I ran into an issue with this the other day and meant to comment on
it.
Apparently IMAP folders aren't really hierarchical in a true sense, so
if you rename a folder and expect it to do what a directory does when
you rename it (have all the same folders under it, not just the
immediate files (messages)) you have to change the path of each
folder.
That is addressed in the RFC at the section I gave the link to:
If the name has inferior hierarchical names, then the inferior
hierarchical names MUST also be renamed. For example, a rename of
"foo" to "zap" will rename "foo/bar" (assuming "/" is the
hierarchy delimiter character) to "zap/bar".
In other words: the protocol spec requires the *server* to do any
downstream renaming. A server that only renames an enclosing folder
while leaving its subfolders at their old names is broken.
Administering mail servers has been a substantial part of my work for
many years, which is why I know which RFC to go to for IMAP4rev1
details, but unlike Benny I don't maintain code that actually has to use
IMAP4rev1 as a client with a diverse jungle of servers. I could manually
test what a handful of different IMAP servers actually do, but that
would not answer the question of whether MM uses a copy+delete process
out of necessity because RENAME is broken often enough to make it
useless or out of a misunderstanding of what RENAME actually does.
It is useful to understand that for many years of the early life of
IMAP4, there was a widely deployed diversity of formal breakage in
servers and clients which created a culture of ad hoc pragmatic
workarounds that lives on in botches like GMail's faux-IMAP and the maze
of client adaptations to it. The hierarchical model is one area where
this has been focused, a consequence of the many edge and corner cases
of multiple uncoordinated clients (and often mutually oblivious
server-side processes) having simultaneous access with modification
powers to a directory tree.
Mailmate's rename is only renaming the top-level folder and not
telling IMAP to rename those under it. So you end up with the top
level folder having a new name, but all the folder children still
having the old path.
The way to do that with a correctly-behaving IMAP server is to create a
new folder, copy all of the existing messages into it, and delete them
from the original folder. This seems to be what MM does and it is a less
risky and more universally workable strategy, but in principle it should
be possible to do a real tree rearrangement with one RENAME command
instead. I am interested in *why* Benny chose not to use RENAME.
I can't think of any case where that's the preferred behavior. I know
the recursive rename is the default in my webmail. I ended up going
there to rename my folder.
(The efficiency issue is a separate one. I can imagine that if
MailMate issues the rename, it could be smart enough to know that all
it has to do locally is move the messages. I don't know I'd it does, I
imagine that logic could get tricky.)
Historically, IMAP servers have mostly mimicked a hierarchical
filesystem for mailboxes rather than actually using their real
filesystems as a directly mapped hierarchy. This solves some server-side
problems (performance, access control, concurrent acess, metadata
storage, etc.) at the cost of making logically atomic operations on the
directory tree non-atomic at the real filesystem level. Depending on
their specific storage models, servers using file-per-message schemes
("Maildir" and related schemes) may have as many distinct filesystem
operations as there are leaf nodes or branch points in a sub-tree being
moved with RENAME, which must seem atomic to clients.
_______________________________________________
mailmate mailing list
[email protected]
http://lists.freron.com/listinfo/mailmate