aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNikolaus Schulz <microschulz@web.de>2008-08-05 16:29:40 +0200
committerNikolaus Schulz <microschulz@web.de>2009-11-06 21:09:39 +0100
commitba8928d279818c3548df9ce44b602612ddfb93cd (patch)
tree95f967ca6c908861fa45ae8f8cd6ccb3b85a416b
parent223e2f9802fcf279badbbc6b27dc4b450206db86 (diff)
downloadarchivemail-ba8928d279818c3548df9ce44b602612ddfb93cd.tar.gz
archivemail-ba8928d279818c3548df9ce44b602612ddfb93cd.tar.bz2
archivemail-ba8928d279818c3548df9ce44b602612ddfb93cd.zip
Cleanup restoring of the mbox timestamps
* Remove code duplication: restore the mbox timestamps once and for all when we're done * Don't bother restoring the file mode when finishing, since this is handled in RetainMbox.finalise() (and need be) * Therefore, rename Mbox.reset_stat() to reset_timestamps()
-rwxr-xr-xarchivemail.py19
1 files changed, 5 insertions, 14 deletions
diff --git a/archivemail.py b/archivemail.py
index 619d9c5..352f2af 100755
--- a/archivemail.py
+++ b/archivemail.py
@@ -324,7 +324,6 @@ class Mbox(mailbox.UnixMailbox):
mbox_file_closed = 0 # GzipFile class has no .closed variable
original_atime = None # last-accessed timestamp
original_mtime = None # last-modified timestamp
- original_mode = None # file permissions to preserve
starting_size = None # file size of mailbox on open
def __init__(self, path, mode="r+"):
@@ -340,7 +339,6 @@ class Mbox(mailbox.UnixMailbox):
try:
self.original_atime = os.path.getatime(path)
self.original_mtime = os.path.getmtime(path)
- self.original_mode = os.stat(path)[stat.ST_MODE]
self.starting_size = os.path.getsize(path)
self.mbox_file = open(path, mode)
except IOError, msg:
@@ -408,15 +406,13 @@ class Mbox(mailbox.UnixMailbox):
self.mbox_file.close()
self.mbox_file_closed = 1
- def reset_stat(self):
- """Set the file timestamps and mode to the original value"""
+ def reset_timestamps(self):
+ """Set the file timestamps to the original value"""
assert(self.original_atime)
assert(self.original_mtime)
assert(self.mbox_file_name)
- assert(self.original_mode) # I doubt this will be 000?
os.utime(self.mbox_file_name, (self.original_atime, \
self.original_mtime))
- os.chmod(self.mbox_file_name, self.original_mode)
def exclusive_lock(self):
"""Set an advisory lock on the 'mbox' mailbox"""
@@ -520,10 +516,8 @@ class RetainMbox(Mbox):
assert(self.__final_name)
self.close()
- # make sure that the retained mailbox has the same timestamps and
+ # make sure that the retained mailbox has the same
# permission as the original mailbox
- atime = os.path.getatime(self.__final_name)
- mtime = os.path.getmtime(self.__final_name)
mode = os.stat(self.__final_name)[stat.ST_MODE]
os.chmod(self.mbox_file_name, mode)
@@ -532,9 +526,8 @@ class RetainMbox(Mbox):
os.rename(self.mbox_file_name, self.__final_name)
except OSError:
# file might be on a different filesystem -- move it manually
- shutil.copy2(self.mbox_file_name, self.__final_name)
+ shutil.copy(self.mbox_file_name, self.__final_name)
os.remove(self.mbox_file_name)
- os.utime(self.__final_name, (atime, mtime)) # reset to original timestamps
_stale.retain = None
def remove(self):
@@ -1201,7 +1194,6 @@ def _archive_mbox(mailbox_name, final_archive_name):
if original.starting_size != original.get_size():
unexpected_error("the mailbox '%s' changed size during reading!" % \
mailbox_name)
- original.reset_stat()
if not options.dry_run:
if retain: retain.close()
if archive: archive.close()
@@ -1212,7 +1204,6 @@ def _archive_mbox(mailbox_name, final_archive_name):
else:
# nothing was retained - everything was deleted
original.leave_empty()
- original.reset_stat()
elif archive:
archive.finalise()
if not options.copy_old_mail:
@@ -1221,12 +1212,12 @@ def _archive_mbox(mailbox_name, final_archive_name):
else:
# nothing was retained - everything was deleted
original.leave_empty()
- original.reset_stat()
else:
# There was nothing to archive
if retain:
# retain will be the same as original mailbox
retain.remove()
+ original.reset_timestamps()
original.procmail_unlock()
if not options.quiet:
stats.display()