aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Regenerate manpage from sgml sourceNikolaus Schulz2010-07-311-12/+42
|
* Manpage: various updatesNikolaus Schulz2010-07-311-16/+50
| | | | | | | 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.
* New option --archive-name, alias -a, to hard-code the archive filenameNikolaus Schulz2010-07-313-19/+64
|
* test suite: fix buggy test of --suffix and --prefix option parsingNikolaus Schulz2010-07-311-2/+2
|
* test suite: replace some plain assertions with TestCase.assertEqual()Nikolaus Schulz2010-07-311-4/+4
|
* Rename variables in make_archive_name()Nikolaus Schulz2010-07-311-6/+6
| | | | | Archive name prefixes may contain path components, thus renaming some variables accordingly.
* Don't create hidden archives when archiving mailboxes with leading dots in ↵Nikolaus Schulz2010-07-313-0/+30
| | | | | | | | the name 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.
* Only use the default archive name suffix when the user specified no affixNikolaus Schulz2010-07-312-12/+41
| | | | Also add more archive name affix testing to the test suite.
* New option --archive-prefix, alias -pNikolaus Schulz2010-07-314-13/+70
| | | | | | | | | | | 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.
* Detect and never archive IMAP server pseudo mbox messagesNikolaus Schulz2010-07-303-0/+31
| | | | | | | 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.
* Give the changelog some more loveNikolaus Schulz2010-07-301-14/+24
| | | | Add references to bug numbers and be more verbose.
* test suite: test unlocking an mbox after dotlocking failed with EACCESNikolaus Schulz2010-07-301-0/+1
|
* Fix crash when unlocking an mbox after dotlocking failed with EACCESNikolaus Schulz2010-07-301-1/+4
| | | | | | 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.
* index.html: reword pointer to the Suse Build Service to be more genericNikolaus Schulz2010-07-301-2/+2
| | | | | Better don't write "soon there will be... <foo>" and don't be specific about available versions. Writing it more generically means lesser maintenance. :)
* Regenerate manpage from the sgml sourceNikolaus Schulz2010-07-301-8/+2
|
* Updated the manpage dateNikolaus Schulz2010-07-301-1/+1
|
* Document in the manpage that archivemail locks the archive mboxNikolaus Schulz2010-07-301-0/+1
|
* Remove the notes about setuid support from the manpageNikolaus Schulz2010-07-291-13/+0
| | | | This feature has been removed.
* Replace distutils MANIFEST with MANIFEST.in templateNikolaus Schulz2010-07-292-12/+9
| | | | | Recent distutils versions always generate a new MANIFEST, overwriting our custom one. See Python bug #8688.
* Rename archivemail.py to archivemailNikolaus Schulz2010-07-295-17/+8
| | | | | | | | | On Unix, most scripts don't come with a file extension, it's not needed, and we distribute the script as "archivemail" anyway. And most importantly, I like it better without the extension. :) With a little trick we can still load the script as a module from the test suite.
* README: drop warning that the test suite is slowNikolaus Schulz2010-07-291-1/+0
| | | | With the recent optimizations of the test suite, it has become quite fast.
* Drop .py extension from the unittest scriptNikolaus Schulz2010-07-295-4/+4
|
* Bump version to 0.8.0Nikolaus Schulz2010-07-293-3/+3
|
* Updated changelog, which was very outdatedNikolaus Schulz2010-07-291-17/+41
|
* Updated copyright yearNikolaus Schulz2010-07-292-3/+3
|
* Updated TODO, dropping a lot of obsolete itemsNikolaus Schulz2010-07-292-23/+0
| | | | | | | | | | | Notable items that are now resolved or implemented: * archives are now locked * the mbox classes have been refactored to a cleaner design * we moved from flock locking to fcntl * the setuid() feature is long gone * symlink attacks for tempfiles are not possible (that is really an ancient TODO item from the original author) * the test suite now has a lot of maildir test cases
* test suite: add more maildir test casesNikolaus Schulz2010-07-291-18/+187
| | | | Maildir testing should now be roughly on par with mbox testing.
* test suite: remove unused remove() methods from maildir classesNikolaus Schulz2010-07-291-17/+0
| | | | | For cleanup of temporary files, we lean on shutil.rmtree anyway, so don't bother wasting more code on this.
* test suite: remove incomplete MH testing codeNikolaus Schulz2010-07-291-32/+1
| | | | | | | | | | I just discovered that archivemails MH support is broken with respect to message flags, and in my opinion it doesn't make much sense to test known-broken functionality. In fact there may well be zero archivemail users with MH mailboxes; MH is basically an obsolete format, and any archivemail user with MH mailboxes would probably have complained about lost message flags.
* test suite: first shot at implementing maildir test casesNikolaus Schulz2010-07-291-3/+387
|
* test suite: remove obsolete $Id$ subversion keywordNikolaus Schulz2010-07-291-1/+0
|
* test suite: cleanup of the mbox testing codeNikolaus Schulz2010-07-291-52/+56
| | | | | | This code is complex, too complex actually. Rename some methods and variables, rework some code and and add some explaining comments in order to make it it least a bit easier to understand.
* test suite: remove obsolete test that we preserve mbox file modesNikolaus Schulz2010-07-291-38/+0
| | | | | This test case is obsolete since we no longer replace the mbox file with a new copy but rewrite it.
* Fix TempMbox.saveas() to unregister the right file from _staleNikolaus Schulz2010-07-281-1/+1
|
* Python language fix: replace C-style boolean values "1" and "0" with True/FalseNikolaus Schulz2010-07-192-100/+100
|
* Remove unused variableNikolaus Schulz2010-07-191-1/+0
|
* Python language fix: remove parentheses around asserted expressionsNikolaus Schulz2010-07-192-95/+95
| | | | assert is not a function.
* Add a note about the race window when resetting an mbox file timestampNikolaus Schulz2010-07-191-1/+1
|
* TODO: new items: make IMAP test suite with no network I/O; drop .py extensionNikolaus Schulz2010-07-191-1/+5
|
* Warn if the temporary directory is not empty on cleanupNikolaus Schulz2010-07-191-2/+7
|
* When creating a dotlock, register it slightly earlier for cleanupNikolaus Schulz2010-07-191-1/+1
| | | | | This closes a very unlikely window where we could create a dotlock file, but then encounter an error and fail to clean up the dotlock.
* In verbose mode, say that we're about to dotlock an mbox before trying to do soNikolaus Schulz2010-07-191-1/+2
|
* Minor docstring/whitespace fixesNikolaus Schulz2010-07-191-3/+4
|
* At critical points, flush mbox files and sync them to diskNikolaus Schulz2010-07-191-3/+30
| | | | | | This should minimize the risk of data loss. Flushing a locked mbox file before unlocking it also ensures that there's no window when another process could lock the mbox after us, but still see the old content.
* Further refactoring of the mbox classes, adding archive locking supportNikolaus Schulz2010-07-191-46/+58
| | | | | | The mbox locking methods move into a new class LockableMboxMixin, and the Mbox and ArchiveMbox classes become subclasses of LockableMboxMixin. class StaleFiles is updated to handle multiple dotlock files.
* Fail as gracefully as possible if writing out the new mailboxes failsNikolaus Schulz2010-07-191-5/+35
| | | | | | | | | | In particular: * If writing the archived messages to the final archive fails, try to restore the archive and abort (by not handling the exception). This is possible since we first save the archive, and only then the modified mailbox, so we don't corrupt the original mbox in this case. * If writing a modified mbox file fails, save the temporary copy.
* Refactoring of the mbox classesNikolaus Schulz2010-07-191-133/+82
| | | | | | | | | | | | | | | | | | | | | | | The RetainMbox and ArchiveMbox classes are now gone, mainly because their finalise() methods were messing with the archived mbox and the archive, respectively, which was not good OO design. The core functionality of the finalise() methods of both removed classes is moved to the objects that are manipulated: the Mbox class representing the mbox that is being archived gains a new method overwrite_with(), and there is a new class ArchiveMbox that represents the actual archive, which has an append() method (yes, unfortunately the new class has the same name like the removed class). The RetainMbox instance is replaced with a TempMbox, and the ArchiveMbox instance either with a TempMbox, or a CompressedTempMbox if archive compression is enabled. Finally, a compressed TempMbox is now a implemented as a subclass of TempMbox, named CompressedMbox. Cooperation with the StaleFiles class moves into the TempMbox class. This means slightly less detailed verbose cleanup reporting, oh well.
* Use safe methods to open the archive mbox and an existing mbox fileNikolaus Schulz2010-07-191-8/+57
|
* mbox locking: omit dotlock if we don't have the permissions to create itNikolaus Schulz2010-07-192-2/+21
| | | | Closes: issue #855269.
* mbox locking: combine locking functions into one and swap lock orderNikolaus Schulz2010-07-192-39/+69
| | | | | | | | | | | | | We used to create a dotlock file first and then lock with fcntl; swap that order, since locking first with fcntl seems to be more common. This patch also adds general mbox lock/unlock methods, which call the dotlock and fcntl-lock methods, and moves the retry logic there. When the dotlock and fcntl methods fail to acquire a lock, they now raise a custom exception "LockUnavailable", which gets caught in the general lock() method. That way, if we succeed to acquire one lock but fail to acquire the other, we can release our locks at the upper level and retry.