Implement ui.makefolder and abort repo.makefolder() in dry-run mode

IMAP, Maildir, and LocalStatus abort if in dry-run mode. IMAP and Maildir
will log that they "would have" created a new folder.

This will probably fail later on as we can not cache messagelists on
folder that don't exist, so --dry-run is not yet safe when new folders
have been created.

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
This commit is contained in:
Sebastian Spaeth 2011-09-15 15:37:52 +02:00
parent 33f55b5362
commit b6807355b5
5 changed files with 17 additions and 7 deletions

View File

@ -124,6 +124,7 @@ class BaseRepository(CustomConfig.ConfigHelperMixin, object):
raise NotImplementedError raise NotImplementedError
def makefolder(self, foldername): def makefolder(self, foldername):
"""Create a new folder"""
raise NotImplementedError raise NotImplementedError
def deletefolder(self, foldername): def deletefolder(self, foldername):

View File

@ -341,11 +341,11 @@ class IMAPRepository(BaseRepository):
foldername = self.getreference() + self.getsep() + foldername foldername = self.getreference() + self.getsep() + foldername
if not foldername: # Create top level folder as folder separator if not foldername: # Create top level folder as folder separator
foldername = self.getsep() foldername = self.getsep()
self.ui.makefolder(self, foldername)
if self.account.dryrun:
return
imapobj = self.imapserver.acquireconnection() imapobj = self.imapserver.acquireconnection()
try: try:
self.ui._msg("Creating new IMAP folder '%s' on server %s" %\
(foldername, self))
result = imapobj.create(foldername) result = imapobj.create(foldername)
if result[0] != 'OK': if result[0] != 'OK':
raise OfflineImapError("Folder '%s'[%s] could not be created. " raise OfflineImapError("Folder '%s'[%s] could not be created. "

View File

@ -67,10 +67,11 @@ class LocalStatusRepository(BaseRepository):
Empty Folder for plain backend. NoOp for sqlite backend as those Empty Folder for plain backend. NoOp for sqlite backend as those
are created on demand.""" are created on demand."""
# Invalidate the cache.
self._folders = None
if self._backend == 'sqlite': if self._backend == 'sqlite':
return return # noop for sqlite which creates on-demand
if self.account.dryrun:
return # bail out in dry-run mode
filename = self.getfolderfilename(foldername) filename = self.getfolderfilename(foldername)
file = open(filename + ".tmp", "wt") file = open(filename + ".tmp", "wt")

View File

@ -81,7 +81,9 @@ class MaildirRepository(BaseRepository):
levels will be created if they do not exist yet. 'cur', levels will be created if they do not exist yet. 'cur',
'tmp', and 'new' subfolders will be created in the maildir. 'tmp', and 'new' subfolders will be created in the maildir.
""" """
self.debug("makefolder called with arg '%s'" % (foldername)) self.ui.makefolder(self, foldername)
if self.account.dryrun:
return
full_path = os.path.abspath(os.path.join(self.root, foldername)) full_path = os.path.abspath(os.path.join(self.root, foldername))
# sanity tests # sanity tests

View File

@ -298,6 +298,12 @@ class UIBase(object):
(src_repo, dst_repo)) (src_repo, dst_repo))
############################## Folder syncing ############################## Folder syncing
def makefolder(self, repo, foldername):
"""Called when a folder is created"""
prefix = "[DRYRUN] " if self.dryrun else ""
self.info("{}Creating folder {}[{}]".format(
prefix, foldername, repo))
def syncingfolder(self, srcrepos, srcfolder, destrepos, destfolder): def syncingfolder(self, srcrepos, srcfolder, destrepos, destfolder):
"""Called when a folder sync operation is started.""" """Called when a folder sync operation is started."""
self.logger.info("Syncing %s: %s -> %s" % (srcfolder, self.logger.info("Syncing %s: %s -> %s" % (srcfolder,