refactor(update_routes): exclude civitai folder from plugin update process

This commit is contained in:
Will Miao
2025-09-15 16:04:20 +08:00
parent 2b847039d4
commit c49be91aa0

View File

@@ -154,7 +154,7 @@ class UpdateRoutes:
async def _download_and_replace_zip(plugin_root: str) -> tuple[bool, str]: async def _download_and_replace_zip(plugin_root: str) -> tuple[bool, str]:
""" """
Download latest release ZIP from GitHub and replace plugin files. Download latest release ZIP from GitHub and replace plugin files.
Skips settings.json. Writes extracted file list to .tracking. Skips settings.json and civitai folder. Writes extracted file list to .tracking.
""" """
repo_owner = "willmiao" repo_owner = "willmiao"
repo_name = "ComfyUI-Lora-Manager" repo_name = "ComfyUI-Lora-Manager"
@@ -193,7 +193,8 @@ class UpdateRoutes:
zip_path = tmp_zip_path zip_path = tmp_zip_path
UpdateRoutes._clean_plugin_folder(plugin_root, skip_files=['settings.json']) # Skip both settings.json and civitai folder
UpdateRoutes._clean_plugin_folder(plugin_root, skip_files=['settings.json', 'civitai'])
# Extract ZIP to temp dir # Extract ZIP to temp dir
with tempfile.TemporaryDirectory() as tmp_dir: with tempfile.TemporaryDirectory() as tmp_dir:
@@ -202,17 +203,17 @@ class UpdateRoutes:
# Find extracted folder (GitHub ZIP contains a root folder) # Find extracted folder (GitHub ZIP contains a root folder)
extracted_root = next(os.scandir(tmp_dir)).path extracted_root = next(os.scandir(tmp_dir)).path
# Copy files, skipping settings.json # Copy files, skipping settings.json and civitai folder
for item in os.listdir(extracted_root): for item in os.listdir(extracted_root):
if item == 'settings.json' or item == 'civitai':
continue
src = os.path.join(extracted_root, item) src = os.path.join(extracted_root, item)
dst = os.path.join(plugin_root, item) dst = os.path.join(plugin_root, item)
if os.path.isdir(src): if os.path.isdir(src):
if os.path.exists(dst): if os.path.exists(dst):
shutil.rmtree(dst) shutil.rmtree(dst)
shutil.copytree(src, dst, ignore=shutil.ignore_patterns('settings.json')) shutil.copytree(src, dst, ignore=shutil.ignore_patterns('settings.json', 'civitai'))
else: else:
if item == 'settings.json':
continue
shutil.copy2(src, dst) shutil.copy2(src, dst)
# Write .tracking file: list all files under extracted_root, relative to extracted_root # Write .tracking file: list all files under extracted_root, relative to extracted_root
@@ -220,8 +221,15 @@ class UpdateRoutes:
tracking_info_file = os.path.join(plugin_root, '.tracking') tracking_info_file = os.path.join(plugin_root, '.tracking')
tracking_files = [] tracking_files = []
for root, dirs, files in os.walk(extracted_root): for root, dirs, files in os.walk(extracted_root):
# Skip civitai folder and its contents
rel_root = os.path.relpath(root, extracted_root)
if rel_root == 'civitai' or rel_root.startswith('civitai' + os.sep):
continue
for file in files: for file in files:
rel_path = os.path.relpath(os.path.join(root, file), extracted_root) rel_path = os.path.relpath(os.path.join(root, file), extracted_root)
# Skip settings.json and any file under civitai
if rel_path == 'settings.json' or rel_path.startswith('civitai' + os.sep):
continue
tracking_files.append(rel_path.replace("\\", "/")) tracking_files.append(rel_path.replace("\\", "/"))
with open(tracking_info_file, "w", encoding='utf-8') as file: with open(tracking_info_file, "w", encoding='utf-8') as file:
file.write('\n'.join(tracking_files)) file.write('\n'.join(tracking_files))