From a8f7a21ad6358110795f1b8e414cb3684bfb6983 Mon Sep 17 00:00:00 2001 From: LindirQuenya <53021080+LindirQuenya@users.noreply.github.com> Date: Sun, 12 Jun 2022 13:02:04 -0400 Subject: [PATCH] Make readonly files writable if there is a deletion error. --- bluezip.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/bluezip.py b/bluezip.py index fdbea78..631d555 100755 --- a/bluezip.py +++ b/bluezip.py @@ -14,6 +14,7 @@ import json import time import sys +import stat import re import os @@ -148,6 +149,11 @@ def rollback(db, session): db.execute('UPDATE session SET rollback = ? WHERE id = ?', (session, prev_session)) db.commit() +def remove_readonly(func, path, _): + "Clear the readonly bit and reattempt the removal" + os.chmod(path, stat.S_IWRITE) + func(path) + class Bluezip: def __init__(self, db, settings, session, args): self.db = db @@ -217,7 +223,7 @@ def process_game(self, game): pcolor('red', f'Error: {e} when storing {game.title}. Skipped.') return self.db.commit() - shutil.rmtree(tmp) + shutil.rmtree(tmp, onerror=remove_readonly) if revision == 1: self.cleanup_obsolete(game, sha256)