Check library: Dont abort if there are folders in the library that calibre does not have permission to access. Fixes #1884544 [Library check tries to read system files](https://bugs.launchpad.net/calibre/+bug/1884544)

Merge branch 'master' of https://github.com/cbhaley/calibre
This commit is contained in:
Kovid Goyal 2020-06-22 23:40:21 +05:30
commit e73312ffb8
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -108,33 +108,38 @@ class CheckLibrary(object):
# Look for titles in the author directories # Look for titles in the author directories
found_titles = False found_titles = False
for title_dir in os.listdir(auth_path): try:
if self.ignore_name(title_dir): for title_dir in os.listdir(auth_path):
continue if self.ignore_name(title_dir):
title_path = os.path.join(auth_path, title_dir)
db_path = os.path.join(auth_dir, title_dir)
m = self.db_id_regexp.search(title_dir)
# Second check: title must have an ID and must be a directory
if m is None or not os.path.isdir(title_path):
self.invalid_titles.append((auth_dir, db_path, 0))
continue
id_ = m.group(1)
# Third check: the id_ must be in the DB and the paths must match
if self.is_case_sensitive:
if int(id_) not in self.all_ids or \
db_path not in self.all_dbpaths:
self.extra_titles.append((title_dir, db_path, 0))
continue continue
else: title_path = os.path.join(auth_path, title_dir)
if int(id_) not in self.all_ids or \ db_path = os.path.join(auth_dir, title_dir)
db_path.lower() not in self.all_lc_dbpaths: m = self.db_id_regexp.search(title_dir)
self.extra_titles.append((title_dir, db_path, 0)) # Second check: title must have an ID and must be a directory
if m is None or not os.path.isdir(title_path):
self.invalid_titles.append((auth_dir, db_path, 0))
continue continue
# Record the book to check its formats id_ = m.group(1)
self.book_dirs.append((db_path, title_dir, id_)) # Third check: the id_ must be in the DB and the paths must match
found_titles = True if self.is_case_sensitive:
if int(id_) not in self.all_ids or \
db_path not in self.all_dbpaths:
self.extra_titles.append((title_dir, db_path, 0))
continue
else:
if int(id_) not in self.all_ids or \
db_path.lower() not in self.all_lc_dbpaths:
self.extra_titles.append((title_dir, db_path, 0))
continue
# Record the book to check its formats
self.book_dirs.append((db_path, title_dir, id_))
found_titles = True
except:
traceback.print_exc()
# Sort-of check: exception processing directory
self.failed_folders.append((auth_dir, traceback.format_exc(), []))
# Fourth check: author directories that contain no titles # Fourth check: author directories that contain no titles
if not found_titles: if not found_titles: