mirror of
https://github.com/Dictionarry-Hub/profilarr.git
synced 2026-01-22 19:01:02 +01:00
75 lines
2.9 KiB
Python
75 lines
2.9 KiB
Python
# git/repo/unlink.py
|
|
import os
|
|
import shutil
|
|
import logging
|
|
from ...db import save_settings
|
|
from ...arr.manager import check_active_sync_configs
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def unlink_repository(repo_path, remove_files=False):
|
|
try:
|
|
# Check for active sync configurations first
|
|
has_active_configs, configs = check_active_sync_configs()
|
|
if has_active_configs:
|
|
error_msg = (
|
|
"Cannot unlink repository while automatic sync configurations are active.\n"
|
|
"The following configurations must be set to manual sync first:\n"
|
|
)
|
|
for config in configs:
|
|
error_msg += f"- {config['name']} (ID: {config['id']}, {config['sync_method']} sync)\n"
|
|
|
|
logger.error(error_msg)
|
|
return False, {
|
|
"error": error_msg,
|
|
"code": "ACTIVE_SYNC_CONFIGS",
|
|
"configs": configs
|
|
}
|
|
|
|
logger.info(
|
|
f"Starting unlink_repository with repo_path: {repo_path} and remove_files: {remove_files}"
|
|
)
|
|
|
|
# Check if repo_path exists
|
|
if not os.path.exists(repo_path):
|
|
logger.error(f"Path {repo_path} does not exist.")
|
|
return False, f"Path {repo_path} does not exist."
|
|
|
|
# Remove the .git folder and optionally the repo files
|
|
if remove_files:
|
|
logger.info(f"Removing all files in the repository at {repo_path}")
|
|
for root, dirs, files in os.walk(repo_path):
|
|
for file in files:
|
|
os.remove(os.path.join(root, file))
|
|
for dir in dirs:
|
|
shutil.rmtree(os.path.join(root, dir))
|
|
logger.info(
|
|
f"Successfully removed all files in the repository at {repo_path}"
|
|
)
|
|
|
|
# Recreate necessary folders
|
|
required_dirs = ['custom_formats', 'profiles', 'regex_patterns']
|
|
for dir_name in required_dirs:
|
|
os.makedirs(os.path.join(repo_path, dir_name), exist_ok=True)
|
|
logger.info(
|
|
f"Recreated the directory {dir_name} at {repo_path}")
|
|
else:
|
|
git_folder = os.path.join(repo_path, '.git')
|
|
if os.path.exists(git_folder):
|
|
logger.info(f"Removing .git folder at {git_folder}")
|
|
shutil.rmtree(git_folder)
|
|
logger.info(
|
|
f"Successfully removed .git folder at {git_folder}")
|
|
else:
|
|
logger.warning(f".git folder does not exist at {git_folder}")
|
|
|
|
# Clear git settings
|
|
save_settings({'gitRepo': None})
|
|
logger.info("Updated settings to remove git information")
|
|
|
|
return True, "Repository successfully unlinked"
|
|
except Exception as e:
|
|
logger.error(f"Error unlinking repository: {str(e)}", exc_info=True)
|
|
return False, f"Error unlinking repository: {str(e)}"
|