diff --git a/auto_dev/utils/rollback.py b/auto_dev/utils/rollback.py index 3db25f90..dd5b0f44 100644 --- a/auto_dev/utils/rollback.py +++ b/auto_dev/utils/rollback.py @@ -1,22 +1,29 @@ """Filesystem utilities for temporary backups and rollback mechanisms.""" +import os import shutil import signal import tempfile from pathlib import Path -from contextlib import chdir, contextmanager +from contextlib import contextmanager from auto_dev.utils import signals -# https://www.youtube.com/watch?v=0GRLhpMao3I -# async-signal safe is the strongest concept of reentrancy. -# async-signal safe implies thread safe. - -# signal.SIGKILL cannot be intercepted SIGNALS_TO_BLOCK = (signal.SIGINT, signal.SIGTERM) +@contextmanager +def chdir(new_dir): + """Change the current working directory temporarily.""" + old_dir = os.getcwd() + try: + os.chdir(new_dir) + yield + finally: + os.chdir(old_dir) + + def _restore_from_backup(directory: Path, backup: Path): for item in directory.rglob("*"): backup_item = backup / item.relative_to(directory) diff --git a/tests/conftest.py b/tests/conftest.py index d8d1b6ad..f7f6feb8 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -4,7 +4,6 @@ import os import tempfile from pathlib import Path -from contextlib import chdir import pytest @@ -13,6 +12,7 @@ DEFAULT_PUBLIC_ID, ) from auto_dev.cli_executor import CommandExecutor +from auto_dev.utils.rollback import chdir from auto_dev.workflow_manager import Task from scripts.generate_command_docs import generate_docs from auto_dev.services.package_manager.index import PackageManager