diff --git a/backend/app/__init__.py b/backend/app/__init__.py index 361676a..f09ae5b 100644 --- a/backend/app/__init__.py +++ b/backend/app/__init__.py @@ -4,6 +4,7 @@ from .regex import bp as regex_bp from .format import bp as format_bp from .settings import bp as settings_bp from .profile import bp as profile_bp +from .git.unlink_repo import repo_bp import os REGEX_DIR = os.path.join('data', 'db', 'regex_patterns') @@ -13,19 +14,20 @@ PROFILE_DIR = os.path.join('data', 'db', 'profiles') def create_app(): app = Flask(__name__) CORS(app, resources={r"/*": {"origins": "*"}}) - + # Initialize directories to avoid issues with non-existing directories initialize_directories() - + # Register Blueprints app.register_blueprint(regex_bp) app.register_blueprint(format_bp) app.register_blueprint(settings_bp) app.register_blueprint(profile_bp) - + app.register_blueprint(repo_bp) + return app def initialize_directories(): os.makedirs(REGEX_DIR, exist_ok=True) os.makedirs(FORMAT_DIR, exist_ok=True) - os.makedirs(PROFILE_DIR, exist_ok=True) \ No newline at end of file + os.makedirs(PROFILE_DIR, exist_ok=True) diff --git a/backend/app/git/unlink_repo.py b/backend/app/git/unlink_repo.py new file mode 100644 index 0000000..8481aea --- /dev/null +++ b/backend/app/git/unlink_repo.py @@ -0,0 +1,35 @@ +import os +import shutil +from flask import Blueprint, jsonify +import logging + +logger = logging.getLogger(__name__) + +repo_bp = Blueprint('repository', __name__, url_prefix='/repository') + +def unlink_repository(settings_manager): + try: + # Remove the .git folder + git_folder = os.path.join(settings_manager.repo_path, '.git') + if os.path.exists(git_folder): + shutil.rmtree(git_folder) + logger.info(f"Removed .git folder from {settings_manager.repo_path}") + + # Update settings + settings_manager.settings.pop('gitRepo', None) + settings_manager.settings.pop('gitToken', None) + settings_manager.save_settings(settings_manager.settings) + 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)}" + +@repo_bp.route('/unlink', methods=['POST']) +def unlink_repo(): + success, message = unlink_repository(repo_bp.settings_manager) + if success: + return jsonify({'success': True, 'message': message}), 200 + else: + return jsonify({'success': False, 'error': message}), 400 \ No newline at end of file diff --git a/backend/app/settings.py b/backend/app/settings.py index 8a15b22..40a4b1e 100644 --- a/backend/app/settings.py +++ b/backend/app/settings.py @@ -9,6 +9,7 @@ import logging from datetime import datetime import json import requests +from .git.unlink_repo import repo_bp, unlink_repository logging.basicConfig(level=logging.DEBUG) logging.getLogger('git').setLevel(logging.WARNING) @@ -572,6 +573,7 @@ class SettingsManager: settings_manager = SettingsManager() +repo_bp.settings_manager = settings_manager @bp.route('', methods=['GET']) def handle_settings():