generated from Templates/Docker_Image
76 lines
2.2 KiB
Python
76 lines
2.2 KiB
Python
"""Git manager for project operations."""
|
|
|
|
import os
|
|
import subprocess
|
|
from typing import Optional
|
|
|
|
|
|
class GitManager:
|
|
"""Manages git operations for the project."""
|
|
|
|
def __init__(self, project_id: str):
|
|
if not project_id:
|
|
raise ValueError("project_id cannot be empty or None")
|
|
self.project_id = project_id
|
|
self.project_dir = f"{os.path.dirname(__file__)}/../../test-project/{project_id}"
|
|
|
|
def init_repo(self):
|
|
"""Initialize git repository."""
|
|
os.makedirs(self.project_dir, exist_ok=True)
|
|
os.chdir(self.project_dir)
|
|
subprocess.run(["git", "init"], check=True, capture_output=True)
|
|
|
|
def add_files(self, paths: list[str]):
|
|
"""Add files to git staging."""
|
|
subprocess.run(["git", "add"] + paths, check=True, capture_output=True)
|
|
|
|
def commit(self, message: str):
|
|
"""Create a git commit."""
|
|
subprocess.run(
|
|
["git", "commit", "-m", message],
|
|
check=True,
|
|
capture_output=True
|
|
)
|
|
|
|
def push(self, remote: str = "origin", branch: str = "main"):
|
|
"""Push changes to remote."""
|
|
subprocess.run(
|
|
["git", "push", "-u", remote, branch],
|
|
check=True,
|
|
capture_output=True
|
|
)
|
|
|
|
def create_branch(self, branch_name: str):
|
|
"""Create and switch to a new branch."""
|
|
subprocess.run(
|
|
["git", "checkout", "-b", branch_name],
|
|
check=True,
|
|
capture_output=True
|
|
)
|
|
|
|
def create_pr(
|
|
self,
|
|
title: str,
|
|
body: str,
|
|
base: str = "main",
|
|
head: Optional[str] = None
|
|
) -> dict:
|
|
"""Create a pull request via gitea API."""
|
|
# This would integrate with gitea API
|
|
# For now, return placeholder
|
|
return {
|
|
"title": title,
|
|
"body": body,
|
|
"base": base,
|
|
"head": head or f"ai-gen-{self.project_id}"
|
|
}
|
|
|
|
def get_status(self) -> str:
|
|
"""Get git status."""
|
|
result = subprocess.run(
|
|
["git", "status", "--porcelain"],
|
|
capture_output=True,
|
|
text=True
|
|
)
|
|
return result.stdout.strip()
|