From 2fae9e67c78a4c811dd3d538b5dca1d73bf30f62 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 20 Oct 2013 09:43:48 +0530 Subject: [PATCH] Even more robust handling of temp library during restore --- src/calibre/db/restore.py | 11 ++++++++++- src/calibre/ptempfile.py | 3 ++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/calibre/db/restore.py b/src/calibre/db/restore.py index 1440bd444b..3f513de100 100644 --- a/src/calibre/db/restore.py +++ b/src/calibre/db/restore.py @@ -99,7 +99,16 @@ class Restore(Thread): def run(self): try: - with TemporaryDirectory('relib') as tdir: + basedir = os.path.dirname(self.src_library_path) + try: + tdir = TemporaryDirectory('_rlib', dir=basedir) + tdir.__enter__() + except EnvironmentError: + # Incase we dont have permissions to create directories in the + # parent folder of the src library + tdir = TemporaryDirectory('_rlib') + + with tdir as tdir: self.library_path = tdir self.scan_library() if not self.load_preferences(): diff --git a/src/calibre/ptempfile.py b/src/calibre/ptempfile.py index f3816f766b..83c39d6b34 100644 --- a/src/calibre/ptempfile.py +++ b/src/calibre/ptempfile.py @@ -170,7 +170,8 @@ class TemporaryDirectory(object): self.keep = keep def __enter__(self): - self.tdir = _make_dir(self.suffix, self.prefix, self.dir) + if not hasattr(self, 'tdir'): + self.tdir = _make_dir(self.suffix, self.prefix, self.dir) return self.tdir def __exit__(self, *args):