dry-run mode: Protect us from actually deleting a message in dry-run mode
Document which functions honor dry-run mode and which don't. Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
This commit is contained in:
parent
5ef69e95c0
commit
256a26a649
@ -279,15 +279,27 @@ class BaseFolder(object):
|
|||||||
raise NotImplementedException
|
raise NotImplementedException
|
||||||
|
|
||||||
def deletemessage(self, uid):
|
def deletemessage(self, uid):
|
||||||
|
"""
|
||||||
|
Note that this function does not check against dryrun settings,
|
||||||
|
so you need to ensure that it is never called in a
|
||||||
|
dryrun mode."""
|
||||||
raise NotImplementedException
|
raise NotImplementedException
|
||||||
|
|
||||||
def deletemessages(self, uidlist):
|
def deletemessages(self, uidlist):
|
||||||
|
"""
|
||||||
|
Note that this function does not check against dryrun settings,
|
||||||
|
so you need to ensure that it is never called in a
|
||||||
|
dryrun mode."""
|
||||||
for uid in uidlist:
|
for uid in uidlist:
|
||||||
self.deletemessage(uid)
|
self.deletemessage(uid)
|
||||||
|
|
||||||
def copymessageto(self, uid, dstfolder, statusfolder, register = 1):
|
def copymessageto(self, uid, dstfolder, statusfolder, register = 1):
|
||||||
"""Copies a message from self to dst if needed, updating the status
|
"""Copies a message from self to dst if needed, updating the status
|
||||||
|
|
||||||
|
Note that this function does not check against dryrun settings,
|
||||||
|
so you need to ensure that it is never called in a
|
||||||
|
dryrun mode.
|
||||||
|
|
||||||
:param uid: uid of the message to be copied.
|
:param uid: uid of the message to be copied.
|
||||||
:param dstfolder: A BaseFolder-derived instance
|
:param dstfolder: A BaseFolder-derived instance
|
||||||
:param statusfolder: A LocalStatusFolder instance
|
:param statusfolder: A LocalStatusFolder instance
|
||||||
@ -363,6 +375,8 @@ class BaseFolder(object):
|
|||||||
2) invoke copymessageto() on those which:
|
2) invoke copymessageto() on those which:
|
||||||
- If dstfolder doesn't have it yet, add them to dstfolder.
|
- If dstfolder doesn't have it yet, add them to dstfolder.
|
||||||
- Update statusfolder
|
- Update statusfolder
|
||||||
|
|
||||||
|
This function checks and protects us from action in ryrun mode.
|
||||||
"""
|
"""
|
||||||
threads = []
|
threads = []
|
||||||
|
|
||||||
@ -400,12 +414,17 @@ class BaseFolder(object):
|
|||||||
|
|
||||||
Get all UIDS in statusfolder but not self. These are messages
|
Get all UIDS in statusfolder but not self. These are messages
|
||||||
that were deleted in 'self'. Delete those from dstfolder and
|
that were deleted in 'self'. Delete those from dstfolder and
|
||||||
statusfolder."""
|
statusfolder.
|
||||||
|
|
||||||
|
This function checks and protects us from action in ryrun mode.
|
||||||
|
"""
|
||||||
deletelist = filter(lambda uid: uid>=0 \
|
deletelist = filter(lambda uid: uid>=0 \
|
||||||
and not self.uidexists(uid),
|
and not self.uidexists(uid),
|
||||||
statusfolder.getmessageuidlist())
|
statusfolder.getmessageuidlist())
|
||||||
if len(deletelist):
|
if len(deletelist):
|
||||||
self.ui.deletingmessages(deletelist, [dstfolder])
|
self.ui.deletingmessages(deletelist, [dstfolder])
|
||||||
|
if self.repository.account.dryrun:
|
||||||
|
return #don't delete messages in dry-run mode
|
||||||
# delete in statusfolder first to play safe. In case of abort, we
|
# delete in statusfolder first to play safe. In case of abort, we
|
||||||
# won't lose message, we will just retransmit some unneccessary.
|
# won't lose message, we will just retransmit some unneccessary.
|
||||||
for folder in [statusfolder, dstfolder]:
|
for folder in [statusfolder, dstfolder]:
|
||||||
@ -418,6 +437,8 @@ class BaseFolder(object):
|
|||||||
msg has a valid UID and exists on dstfolder (has not e.g. been
|
msg has a valid UID and exists on dstfolder (has not e.g. been
|
||||||
deleted there), sync the flag change to both dstfolder and
|
deleted there), sync the flag change to both dstfolder and
|
||||||
statusfolder.
|
statusfolder.
|
||||||
|
|
||||||
|
This function checks and protects us from action in ryrun mode.
|
||||||
"""
|
"""
|
||||||
# For each flag, we store a list of uids to which it should be
|
# For each flag, we store a list of uids to which it should be
|
||||||
# added. Then, we can call addmessagesflags() to apply them in
|
# added. Then, we can call addmessagesflags() to apply them in
|
||||||
|
@ -345,8 +345,9 @@ class UIBase(object):
|
|||||||
|
|
||||||
def deletingmessages(self, uidlist, destlist):
|
def deletingmessages(self, uidlist, destlist):
|
||||||
ds = self.folderlist(destlist)
|
ds = self.folderlist(destlist)
|
||||||
self.logger.info("Deleting %d messages (%s) in %s" % (
|
prefix = "[DRYRUN] " if self.dryrun else ""
|
||||||
len(uidlist),
|
self.info("{}Deleting {} messages ({}) in {}".format(
|
||||||
|
prefix, len(uidlist),
|
||||||
offlineimap.imaputil.uid_sequence(uidlist), ds))
|
offlineimap.imaputil.uid_sequence(uidlist), ds))
|
||||||
|
|
||||||
def addingflags(self, uidlist, flags, dest):
|
def addingflags(self, uidlist, flags, dest):
|
||||||
|
Loading…
Reference in New Issue
Block a user