maildir: Create top level dir recursively

This patch fixes the situation when "localfolders" specifies path that
is more that one level deep and top directory does not exists.  Example
would be "localfolders = ~/Mail/a".  This especially relevant on the
first run.

In that case we would end up with unhandled exception causing
unexpected termination of the program.

Thread 'Account sync test' terminated with exception:
Traceback (most recent call last):
  File "/offlineimap/offlineimap/threadutil.py", line 172, in run
    Thread.run(self)
  File "/usr/lib/python2.7/threading.py", line 754, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/offlineimap/offlineimap/accounts.py", line 258, in syncrunner
    self.localrepos  = Repository(self, 'local')
  File "/offlineimap/offlineimap/repository/__init__.py", line 82, in __new__
    return repo(name, account)
  File "/offlineimap/offlineimap/repository/Maildir.py", line 40, in __init__
    os.mkdir(self.root, 0o700)
OSError: [Errno 2] No such file or directory: '/Mail/a'

By replacing call to "mkdir" with "makedirs" we can simply create
directories recursively.

Signed-off-by: Łukasz Żarnowiecki <dolohow@outlook.com>
Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
This commit is contained in:
Łukasz Żarnowiecki 2016-06-01 18:25:27 +02:00 committed by Nicolas Sebrecht
parent f00cbeed5a
commit 48ae1a36c8

View File

@ -37,7 +37,7 @@ class MaildirRepository(BaseRepository):
# Create the top-level folder if it doesn't exist # Create the top-level folder if it doesn't exist
if not os.path.isdir(self.root): if not os.path.isdir(self.root):
os.mkdir(self.root, 0o700) os.makedirs(self.root, 0o700)
# Create the keyword->char mapping # Create the keyword->char mapping
self.keyword2char = dict() self.keyword2char = dict()