From 98924814addee56a5a0dc2633bd8268b7463bc6d Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 22 Jul 2013 13:37:52 +0530 Subject: [PATCH] Fix metadata backup not being written if book directory does not exist --- src/calibre/db/backend.py | 9 +++++++-- src/calibre/db/backup.py | 2 ++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/calibre/db/backend.py b/src/calibre/db/backend.py index 9eb49ccd4c..db5510d055 100644 --- a/src/calibre/db/backend.py +++ b/src/calibre/db/backend.py @@ -1390,8 +1390,13 @@ class DB(object): def write_backup(self, path, raw): path = os.path.abspath(os.path.join(self.library_path, path, 'metadata.opf')) - with lopen(path, 'wb') as f: - f.write(raw) + try: + with lopen(path, 'wb') as f: + f.write(raw) + except EnvironmentError: + os.makedirs(os.path.dirname(path)) + with lopen(path, 'wb') as f: + f.write(raw) def read_backup(self, path): path = os.path.abspath(os.path.join(self.library_path, path, 'metadata.opf')) diff --git a/src/calibre/db/backup.py b/src/calibre/db/backup.py index dc9f338fc9..1a6ff13412 100644 --- a/src/calibre/db/backup.py +++ b/src/calibre/db/backup.py @@ -100,11 +100,13 @@ class MetadataBackup(Thread): self.db.write_backup(book_id, raw) except: prints('Failed to write backup metadata for id:', book_id, 'once') + traceback.print_exc() self.wait(self.interval) try: self.db.write_backup(book_id, raw) except: prints('Failed to write backup metadata for id:', book_id, 'again, giving up') + traceback.print_exc() return self.db.clear_dirtied(book_id, sequence)