Spaces:
Runtime error
Runtime error
| """Git utilities for HYDRA autoresearch branch management.""" | |
| import os | |
| import subprocess | |
| REPO_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) | |
| def run_git(*args: str, check: bool = True) -> subprocess.CompletedProcess: | |
| """Run a git command in the repo directory. | |
| Args: | |
| *args: Git command arguments. | |
| check: Whether to raise on non-zero exit code. | |
| Returns: | |
| Completed process with stdout/stderr captured. | |
| """ | |
| return subprocess.run( | |
| ["git"] + list(args), | |
| cwd=REPO_DIR, | |
| capture_output=True, | |
| text=True, | |
| check=check, | |
| ) | |
| def current_branch() -> str: | |
| """Return the current git branch name. | |
| Returns: | |
| Branch name string. | |
| """ | |
| result = run_git("rev-parse", "--abbrev-ref", "HEAD") | |
| return result.stdout.strip() | |
| def current_commit_short() -> str: | |
| """Return the current HEAD commit short hash (7 chars). | |
| Returns: | |
| 7-character commit hash. | |
| """ | |
| result = run_git("rev-parse", "--short=7", "HEAD") | |
| return result.stdout.strip() | |
| def create_branch(name: str) -> None: | |
| """Create and switch to a new branch. | |
| Args: | |
| name: Branch name to create. | |
| """ | |
| run_git("checkout", "-b", name) | |
| def commit_all(message: str) -> str: | |
| """Stage all changes, commit, and return short hash. | |
| Args: | |
| message: Commit message. | |
| Returns: | |
| Short commit hash after committing. | |
| """ | |
| run_git("add", "-A") | |
| run_git("commit", "-m", message, check=False) | |
| return current_commit_short() | |
| def reset_to(commit: str) -> None: | |
| """Hard reset to a specific commit, discarding all changes. | |
| Args: | |
| commit: Commit hash (short or full) to reset to. | |
| """ | |
| run_git("reset", "--hard", commit) | |
| def get_last_n_diffs(n: int = 3) -> list[str]: | |
| """Get the last N commit diffs (--stat format) for meta-agent context. | |
| Args: | |
| n: Number of recent commits to retrieve. | |
| Returns: | |
| List of diff stat strings, one per commit (truncated to 500 chars). | |
| """ | |
| result = run_git("log", f"-{n}", "--format=%H", check=False) | |
| hashes = [h for h in result.stdout.strip().split("\n") if h] | |
| diffs: list[str] = [] | |
| for h in hashes: | |
| diff_result = run_git("show", "--stat", h, check=False) | |
| diffs.append(diff_result.stdout[:500]) | |
| return diffs | |