Source code for ralph.git.rebase._rebase_lock

"""RebaseLock — context manager that acquires and releases the rebase lock."""

from __future__ import annotations

from typing import TYPE_CHECKING, ClassVar

if TYPE_CHECKING:
    from collections.abc import Callable


[docs] class RebaseLock: """Context manager that acquires and releases the rebase lock.""" _acquire_fn: ClassVar[Callable[[], None] | None] = None _release_fn: ClassVar[Callable[[], None] | None] = None def __init__(self) -> None: self.owns_lock = False def __enter__(self) -> RebaseLock: if RebaseLock._acquire_fn is None: raise RuntimeError("RebaseLock._acquire_fn has not been injected") RebaseLock._acquire_fn() self.owns_lock = True return self def __exit__( self, exc_type: type[BaseException] | None, exc_val: BaseException | None, exc_tb: object | None, ) -> None: if self.owns_lock: if RebaseLock._release_fn is None: raise RuntimeError("RebaseLock._release_fn has not been injected") RebaseLock._release_fn() def leak(self) -> bool: owns = self.owns_lock self.owns_lock = False return owns
__all__ = ["RebaseLock"]