🔧 FIX: Git identity setzen + Changes-Status checken via git status
docker-build-and-push / build (push) Successful in 18s

This commit is contained in:
KI-Sparringpartner
2026-08-03 20:16:36 +02:00
parent a18c53c211
commit 4a2951dd26
2 changed files with 56 additions and 7 deletions
+33 -1
View File
@@ -139,4 +139,36 @@ def push_changes(repo_path: Path, message: str = "Update 🧠", changelog_conten
["git", "push"], cwd=repo_path, capture_output=True, text=True
)
return {"success": result.returncode == 0, "output": result.stdout}
return {"success": result.returncode == 0, "output": result.stdout}
def get_git_status(repo_path: Path) -> dict:
"""Prueft den Status eines Git-Repo fuer aenderungen."""
# Setze git identity if not set (fuer Push ohne manuelle Konfig)
try:
subprocess.run(
["git", "config", "--global", "user.name", "KI-Sparringpartner"],
cwd=repo_path, capture_output=True
)
subprocess.run(
["git", "config", "--global", "user.email", "ai@local.internal"],
cwd=repo_path, capture_output=True
)
except Exception:
pass # Falls git config fehlschlaegt, versuch trotzdem push
# Check fuer uncommitted changes
result = subprocess.run(
["git", "status", "--porcelain"],
cwd=repo_path,
capture_output=True,
text=True
)
has_changes = bool(result.stdout.strip())
return {
"has_changes": has_changes,
"uncommitted_files": result.stdout.strip().split("\n") if result.stdout else [],
"can_push": has_changes
}
+23 -6
View File
@@ -28,8 +28,9 @@ class PushRequest(BaseModel):
@router.get("/projects") # Listet abonierte Projekte!
async def list_projects():
"""Listet lokale (abonierte) Projekte an."""
"""Listet lokale (abonierte) Projekte an mit Git-Status."""
from .main import PROJECTS_DIR
from .git_manager import get_git_status
projects = []
@@ -39,18 +40,28 @@ async def list_projects():
if project_dir.is_dir() and not project_dir.name.startswith('.'):
has_git = (project_dir / '.git').exists()
# Pruefe ob dieses Projekt bearbeitet werden darf
can_write = os.access(str(project_dir), os.W_OK) if project_dir.exists() else False
# Git Status checken
git_status = {"has_changes": False, "uncommitted_files": []}
if has_git:
try:
git_status = get_git_status(project_dir)
except Exception as e:
print(f"Git status error: {e}")
all_projects.append({
"name": project_dir.name,
"path": str(project_dir),
"subscribed": True,
"has_git": bool(has_git),
"can_write": can_write
"can_write": can_write,
"has_changes": git_status.get("has_changes", False),
"uncommitted_files": git_status.get("uncommitted_files", [])
})
projects = sorted(all_projects, key=lambda x: ("" in x["name"]), reverse=True)
# Sortiere: Projects mit Changes zuerst
projects = sorted(all_projects, key=lambda x: (not x["has_changes"]))
return {"projects": projects}
@@ -122,6 +133,12 @@ async def subscribe_repo(req: SubscribeRequest):
generate_changelog(target_dir)
# Initialen Push nach dem ersten Clone (optional)
try:
push_changes(target_dir, "Initial commit from gitea-sync-ai")
except Exception as e:
print(f"Initial push skipped: {e}")
return {
"message": f"{req.target_name} geklont!",
"path": str(target_dir),
@@ -134,7 +151,6 @@ async def subscribe_repo(req: SubscribeRequest):
async def push_to_gitea(req: PushRequest):
"""Pusht Changes eines Projekts zurueck zu Gitea."""
from .main import PROJECTS_DIR
import stat
target_dir = PROJECTS_DIR / req.project_name
@@ -161,6 +177,7 @@ async def push_to_gitea(req: PushRequest):
async def push_project(project_name: str):
"""Pusht Changes eines Projekts zurueck zu Gitea (ohne ChangelogContent)."""
from .main import PROJECTS_DIR
import stat
target_dir = PROJECTS_DIR / project_name
@@ -184,5 +201,5 @@ async def push_project(project_name: str):
# Importiere die Funktionen am Ende damit sie verfügbar sind!
from .git_manager import clone_repo, set_permissions, push_changes, force_remove_all
from .git_manager import clone_repo, set_permissions, push_changes, force_remove_all, get_git_status
from .changelog_gen import generate_changelog