Possible workaround for some windows machines where the viewer is getting access denied errors while renaming a directory

This commit is contained in:
Kovid Goyal 2019-10-04 15:20:58 +05:30
parent 2b536dd02f
commit b55ef85fd7
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -59,6 +59,17 @@ def robust_rmtree(x):
return False return False
def robust_rename(a, b):
retries = 10 if iswindows else 1 # retry on windows to get around the idiotic mandatory file locking
for i in range(retries):
try:
os.rename(a, b)
return True
except EnvironmentError:
time.sleep(0.1)
return False
def clear_temp(temp_path): def clear_temp(temp_path):
now = time.time() now = time.time()
for x in os.listdir(temp_path): for x in os.listdir(temp_path):
@ -159,7 +170,12 @@ def prepare_book(path, convert_func=do_convert, max_age=30 * DAY, force=False):
entries = metadata['entries'] entries = metadata['entries']
instances = entries.setdefault(key, []) instances = entries.setdefault(key, [])
os.rmdir(ans) os.rmdir(ans)
os.rename(src_path, ans) if not robust_rename(src_path, ans):
raise Exception((
'Failed to rename: "{}" to "{}" probably some software such as an antivirus or file sync program'
' running on your computer has locked the files'
).format(src_path, ans))
instance['status'] = 'finished' instance['status'] = 'finished'
for q in instances: for q in instances:
if q['id'] == instance['id']: if q['id'] == instance['id']: