From 1a612b56d7c6378dba7b4cf238bd8983ad0d32db Mon Sep 17 00:00:00 2001 From: 8ball030 <35799987+8ball030@users.noreply.github.com> Date: Fri, 14 Mar 2025 00:07:26 +0000 Subject: [PATCH 1/3] Update rollback.py --- auto_dev/utils/rollback.py | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/auto_dev/utils/rollback.py b/auto_dev/utils/rollback.py index 3db25f90..dee0227d 100644 --- a/auto_dev/utils/rollback.py +++ b/auto_dev/utils/rollback.py @@ -4,16 +4,11 @@ import signal import tempfile from pathlib import Path -from contextlib import chdir, contextmanager +from contextlib import contextmanager +from os import chdir 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) @@ -35,6 +30,17 @@ def _restore_from_backup(directory: Path, backup: Path): shutil.copy2(item, directory_item) +@contextmanager +def chdir(new_dir): + old_dir = os.getcwd() + try: + os.chdir(new_dir) + yield + finally: + os.chdir(old_dir) + + + @contextmanager def on_exit(directory: Path): """Creates a temporary backup of the directory and restores it upon exit.""" From 98fea89d343345ebd1631b4d7d1032f85576b7cd Mon Sep 17 00:00:00 2001 From: 8ball030 <8baller@station.codes> Date: Fri, 14 Mar 2025 00:21:37 +0000 Subject: [PATCH 2/3] chore:linters --- auto_dev/utils/rollback.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/auto_dev/utils/rollback.py b/auto_dev/utils/rollback.py index dee0227d..bf25b514 100644 --- a/auto_dev/utils/rollback.py +++ b/auto_dev/utils/rollback.py @@ -1,17 +1,28 @@ """Filesystem utilities for temporary backups and rollback mechanisms.""" +import os import shutil import signal import tempfile from pathlib import Path from contextlib import contextmanager -from os import chdir from auto_dev.utils import signals + SIGNALS_TO_BLOCK = (signal.SIGINT, signal.SIGTERM) +@contextmanager +def _chdir(new_dir): + 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) @@ -30,23 +41,12 @@ def _restore_from_backup(directory: Path, backup: Path): shutil.copy2(item, directory_item) -@contextmanager -def chdir(new_dir): - old_dir = os.getcwd() - try: - os.chdir(new_dir) - yield - finally: - os.chdir(old_dir) - - - @contextmanager def on_exit(directory: Path): """Creates a temporary backup of the directory and restores it upon exit.""" backup = Path(tempfile.mkdtemp(prefix="backup_")) / directory.name shutil.copytree(directory, backup, symlinks=True) - with chdir(Path.cwd()): + with _chdir(Path.cwd()): try: yield finally: @@ -60,7 +60,7 @@ def on_exception(directory: Path): """Creates a temporary backup of the directory and restores it only if an exception occurs.""" backup = Path(tempfile.mkdtemp(prefix="backup_")) / directory.name shutil.copytree(directory, backup, symlinks=True) - with chdir(Path.cwd()): + with _chdir(Path.cwd()): try: yield except BaseException: From fef31b65338ad37c00f9cdb770e95d8f2071af11 Mon Sep 17 00:00:00 2001 From: 8ball030 <8baller@station.codes> Date: Fri, 14 Mar 2025 00:25:58 +0000 Subject: [PATCH 3/3] chore:linters-within-tests --- auto_dev/utils/rollback.py | 7 ++++--- tests/conftest.py | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/auto_dev/utils/rollback.py b/auto_dev/utils/rollback.py index bf25b514..dd5b0f44 100644 --- a/auto_dev/utils/rollback.py +++ b/auto_dev/utils/rollback.py @@ -14,7 +14,8 @@ @contextmanager -def _chdir(new_dir): +def chdir(new_dir): + """Change the current working directory temporarily.""" old_dir = os.getcwd() try: os.chdir(new_dir) @@ -46,7 +47,7 @@ def on_exit(directory: Path): """Creates a temporary backup of the directory and restores it upon exit.""" backup = Path(tempfile.mkdtemp(prefix="backup_")) / directory.name shutil.copytree(directory, backup, symlinks=True) - with _chdir(Path.cwd()): + with chdir(Path.cwd()): try: yield finally: @@ -60,7 +61,7 @@ def on_exception(directory: Path): """Creates a temporary backup of the directory and restores it only if an exception occurs.""" backup = Path(tempfile.mkdtemp(prefix="backup_")) / directory.name shutil.copytree(directory, backup, symlinks=True) - with _chdir(Path.cwd()): + with chdir(Path.cwd()): try: yield except BaseException: 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