The proprietary "SmartMail" IMAP server likes to send no untagged SEARCH
response when the set of matching email messages is empty.
This was brought up as sf.net support request #3213272.
This fixes test suite failures with Python 2.7.
Starting with Python 2.7, gzip.GzipFile is subclassing io.IOBase.
The seek() method of io.IOBase differs from file.seek() and the old
gzip.GzipFile.seek() in that it returns the new file position, not None.
And in Python 2.7, gzip.GzipFile.tell() is inherited from
io.IOBase.tell(), which is implemented using its seek() method.
FixedGzipFile subclasses gzip.GzipFile and overrides seek(); therefore,
this method need be adapted for this change in the interface.
Closes: #3314293.
* docbook2{man,html} used to generate temporary files; the new XML tool
xsltproc does not, so we can drop the corresponding cleanup rule.
* The `bdist_rpm' rule for building rpm packages was broken for a long
time, and therefore commented out. The distutils bug that broke the
rule is now fixed, but I'm removing the rule nevertheless because it's
useless.
* The `upload' rule no longer works; drop it.
* Update .PHONY
The LIST reply handling in imap_find_mailboxes() was buggy in several
ways. It expected a non-NIL hierarchy delimiter, and it assumed that the
mailbox name in a LIST reply is always quoted; but it can be an astring, a
quoted string, or a literal (see RFC 3501 for the definitions of these
tokens). These variants should now all be interpreted correctly.
In addition, quoted mailbox names are now handled more strictly to the
letter of the RFC; this only affects mailbox names containing a " or a
backslash, though.
The only non-obvious code change required for this is due to the fact that
computing the archive names has to move into the format-specific archiving
functions, because they can no longer be derived from the mailbox name
beforehand.
In particular:
* we no longer use shutil.copy{,2} to write back a changed mbox
* having temporary mbox files in the same directory as the originals doesn't
make sense anymore since we no longer commit them with rename(2)
* the --archive-name option is now implemented
Document the --archive-name option, and explain the basic idea of deriving the
archive filename from the mailbox earlier and more prominently. Also document
how archivemail tries not to create hidden archive files, and remove some
obsolete notes.
When archiving a mailbox with leading dots in the name and no archive name
prefix specified, strip the dots off the archive name. This is targeting
Maildir++ subfolders.
Technically, this works just like the --suffix option. This commit also
updates the manpage accordingly.
Currently, the prefix is not checked for slashes, so it could contain path
components. (The same applies for the suffix, btw). Since the expanded
string is prepended to the archive base name, this can be used to dynamically
configure the archive directory, depending on the archive cutoff date. I'm
not sure if this can be considered a reasonable feature, though.
IMAP servers (Dovecot and UW-IMAP at least) may store mailbox meta data for
mboxes in a pseudo message. Such messages are now detected and never archived.
This commit includes a test case in the test suite.
If we don't have sufficient permissions to create a dotlock for an mbox file,
record that, and don't try to remove the dotlock when unlocking the mbox
later.