| import time |
| from upgrade_codes.upgrade_manager import UpgradeManager |
| from upgrade_codes.upgrade_core.constants import TEXTS |
|
|
| upgrade_manager = UpgradeManager() |
| upgrade_manager.check_user_config_exists() |
|
|
|
|
| def run_upgrade(): |
| logger = upgrade_manager.logger |
| start_time = time.time() |
|
|
| lang = upgrade_manager.lang |
| logger.info(TEXTS[lang]["welcome_message"]) |
| texts = TEXTS[lang] |
|
|
| logger.info(texts["start_upgrade"]) |
| upgrade_manager.log_system_info() |
|
|
| if not upgrade_manager.check_git_installed(): |
| logger.error(texts["git_not_found"]) |
| return |
|
|
| response = input("\033[93m" + texts["operation_preview"] + "\033[0m").lower() |
| if response != "y": |
| return |
|
|
| success, error_msg = upgrade_manager.run_command( |
| "git rev-parse --is-inside-work-tree" |
| ) |
| if not success: |
| logger.error(texts["not_git_repo"]) |
| logger.error(f"Error details: {error_msg}") |
| return |
|
|
| |
| logger.info(texts["checking_ahead_status"]) |
| success, ahead_behind = upgrade_manager.run_command( |
| "git rev-list --left-right --count HEAD...@{upstream}" |
| ) |
| if success: |
| ahead, behind = map(int, ahead_behind.strip().split()) |
| if ahead > 0: |
| logger.error(texts["local_ahead"].format(count=ahead)) |
| logger.error(texts["push_blocked"]) |
| logger.info(texts["backup_suggestion"]) |
| logger.warning(texts["abort_upgrade"]) |
| return |
|
|
| |
| logger.info(texts["checking_stash"]) |
| success, changes = upgrade_manager.run_command("git status --porcelain") |
| if not success: |
| logger.error(f"Failed to check git status: {changes}") |
| return |
|
|
| has_changes = bool(changes.strip()) |
| if has_changes: |
| change_count = len([line for line in changes.strip().split("\n") if line]) |
| logger.debug(texts["detected_changes"].format(count=change_count)) |
| logger.warning(texts["uncommitted"]) |
|
|
| operation, elapsed = upgrade_manager.time_operation( |
| upgrade_manager.run_command, "git stash" |
| ) |
| success, output = operation |
| logger.debug( |
| texts["operation_time"].format(operation="git stash", time=elapsed) |
| ) |
|
|
| if not success: |
| logger.error(texts["stash_error"]) |
| logger.error(f"Error details: {output}") |
| return |
| logger.info(texts["changes_stashed"]) |
|
|
| |
| logger.info(texts["checking_remote"]) |
| operation, elapsed = upgrade_manager.time_operation( |
| upgrade_manager.run_command, "git fetch" |
| ) |
| success, output = operation |
| logger.debug(texts["operation_time"].format(operation="git fetch", time=elapsed)) |
|
|
| if success: |
| success, ahead_behind = upgrade_manager.run_command( |
| "git rev-list --left-right --count HEAD...@{upstream}" |
| ) |
| if success: |
| ahead, behind = ahead_behind.strip().split() |
| if int(behind) > 0: |
| logger.info(texts["remote_behind"].format(count=behind)) |
| else: |
| logger.info(texts["remote_ahead"]) |
|
|
| |
| logger.info(texts["pulling"]) |
| operation, elapsed = upgrade_manager.time_operation( |
| upgrade_manager.run_command, "git pull" |
| ) |
| success, output = operation |
| logger.debug(texts["operation_time"].format(operation="git pull", time=elapsed)) |
|
|
| if not success: |
| logger.error(texts["pull_error"]) |
| logger.error(f"Error details: {output}") |
| if has_changes: |
| logger.warning(texts["restoring"]) |
| success, restore_output = upgrade_manager.run_command("git stash pop") |
| if not success: |
| logger.error(f"Failed to restore changes: {restore_output}") |
| return |
|
|
| |
| submodules = upgrade_manager.get_submodule_list() |
| if submodules: |
| logger.info(texts["updating_submodules"]) |
|
|
| operation, elapsed = upgrade_manager.time_operation( |
| upgrade_manager.run_command, "git submodule update --init --recursive" |
| ) |
| success, output = operation |
| logger.debug( |
| texts["operation_time"].format( |
| operation="git submodule update", time=elapsed |
| ) |
| ) |
|
|
| if not success: |
| logger.error(texts["submodule_update_error"]) |
| logger.error(f"Error details: {output}") |
| else: |
| for submodule in submodules: |
| logger.debug(texts["submodule_updated"].format(submodule=submodule)) |
| else: |
| logger.info(texts["no_submodules"]) |
|
|
| |
| upgrade_manager.sync_user_config() |
| upgrade_manager.update_user_config() |
|
|
| if has_changes: |
| logger.warning(texts["restoring"]) |
| operation, elapsed = upgrade_manager.time_operation( |
| upgrade_manager.run_command, "git stash pop" |
| ) |
| success, output = operation |
| logger.debug( |
| texts["operation_time"].format(operation="git stash pop", time=elapsed) |
| ) |
|
|
| if not success: |
| logger.error(texts["conflict_warning"]) |
| logger.error(f"Error details: {output}") |
| logger.warning(texts["manual_resolve"]) |
| logger.info(texts["stash_list"]) |
| logger.info(texts["stash_pop"]) |
| return |
|
|
| end_time = time.time() |
| total_elapsed = end_time - start_time |
| logger.info(texts["finish_upgrade"].format(time=total_elapsed)) |
|
|
| logger.info(texts["upgrade_complete"]) |
| logger.info(texts["check_config"]) |
| logger.info(texts["resolve_conflicts"]) |
| logger.info(texts["check_backup"]) |
|
|
|
|
| if __name__ == "__main__": |
| run_upgrade() |
|
|