Clean obsolete MPQ fallback caches
This commit is contained in:
@@ -277,6 +277,19 @@ def _package_cache_dir(target_dir, package_id):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def remove_package_cache(target_dir, package_id):
|
||||||
|
"""Remove one tool-owned package cache without touching installed files."""
|
||||||
|
cache_dir = _package_cache_dir(target_dir, package_id)
|
||||||
|
if os.path.isdir(cache_dir):
|
||||||
|
shutil.rmtree(cache_dir, ignore_errors=True)
|
||||||
|
|
||||||
|
parent = os.path.dirname(cache_dir)
|
||||||
|
try:
|
||||||
|
os.rmdir(parent)
|
||||||
|
except OSError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
def _safe_cache_filename(filename):
|
def _safe_cache_filename(filename):
|
||||||
if not isinstance(filename, str) or not filename:
|
if not isinstance(filename, str) or not filename:
|
||||||
raise RemotePackageError("Invalid package-cache filename.")
|
raise RemotePackageError("Invalid package-cache filename.")
|
||||||
@@ -1770,6 +1783,21 @@ def managed_mod_is_current(target_dir, mod_id, revision):
|
|||||||
return str(installed_revision) == str(revision)
|
return str(installed_revision) == str(revision)
|
||||||
|
|
||||||
|
|
||||||
|
def managed_mpq_is_usable(target_dir, mod_id):
|
||||||
|
"""True when a managed single-file MPQ still has a valid MPQ header."""
|
||||||
|
if not managed_mod_is_installed(target_dir, mod_id):
|
||||||
|
return False
|
||||||
|
files = _load_managed_manifest(target_dir, mod_id)
|
||||||
|
if len(files) != 1:
|
||||||
|
return False
|
||||||
|
path = os.path.join(target_dir, files[0])
|
||||||
|
try:
|
||||||
|
_verify_mpq(path)
|
||||||
|
return True
|
||||||
|
except RemotePackageError:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def managed_mpq_is_current(target_dir, mod_id, revision):
|
def managed_mpq_is_current(target_dir, mod_id, revision):
|
||||||
"""Cheap integrity check for an already installed managed MPQ."""
|
"""Cheap integrity check for an already installed managed MPQ."""
|
||||||
if not managed_mod_is_current(target_dir, mod_id, revision):
|
if not managed_mod_is_current(target_dir, mod_id, revision):
|
||||||
|
|||||||
Reference in New Issue
Block a user