Files
Brancheneinstufung2/notion_commit_hook.py

98 lines
3.5 KiB
Python

import sys
import json
import subprocess
import os
from datetime import datetime # datetime kann direkt importiert werden
# Ermittle das Git-Projekt-Root-Verzeichnis
try:
PROJECT_ROOT = subprocess.check_output(["git", "rev-parse", "--show-toplevel"]).decode("utf-8").strip()
# Stelle sicher, dass PROJECT_ROOT am Anfang von sys.path steht
if PROJECT_ROOT not in sys.path:
sys.path.insert(0, PROJECT_ROOT)
# DEBUG prints
print(f"DEBUG: PROJECT_ROOT = {PROJECT_ROOT}", file=sys.stderr)
print(f"DEBUG: sys.path = {sys.path}", file=sys.stderr)
except subprocess.CalledProcessError:
print("Fehler: Nicht in einem Git-Repository. Kann notion_commit_hook nicht ausführen.", file=sys.stderr)
sys.exit(1)
try:
import dev_session
# Greife auf Funktionen über dev_session.function_name zu
append_blocks_to_notion_page = dev_session.append_blocks_to_notion_page
decimal_hours_to_hhmm = dev_session.decimal_hours_to_hhmm
except ImportError as e:
print(f"Fehler: Konnte dev_session.py nicht importieren. Stelle sicher, dass dev_session.py im Projekt-Root liegt. Details: {e}", file=sys.stderr)
sys.exit(1)
SESSION_DIR = os.path.join(PROJECT_ROOT, ".dev_session")
SESSION_FILE_PATH = os.path.join(SESSION_DIR, "SESSION_INFO")
def get_last_commit_message() -> str:
"""Holt die letzte Commit-Nachricht mit git."""
try:
result = subprocess.run(
["git", "log", "-1", "--pretty=%B"],
capture_output=True,
text=True,
check=True
)
return result.stdout.strip()
except (subprocess.CalledProcessError, FileNotFoundError):
return ""
def main():
"""Hauptfunktion des Git-Hooks."""
if not os.path.exists(SESSION_FILE_PATH):
sys.exit(0)
try:
with open(SESSION_FILE_PATH, "r") as f:
session_data = json.load(f)
task_id = session_data.get("task_id")
token = session_data.get("token")
session_start_time_str = session_data.get("session_start_time")
if not task_id or not token:
sys.exit(0)
commit_message = get_last_commit_message()
if commit_message:
time_comment = ""
if session_start_time_str:
session_start_time = datetime.fromisoformat(session_start_time_str)
elapsed_time = datetime.now() - session_start_time
elapsed_hours = elapsed_time.total_seconds() / 3600
elapsed_hhmm = decimal_hours_to_hhmm(elapsed_hours)
time_comment = f"⏱️ Arbeitszeit in dieser Session: {elapsed_hhmm}\\n"
report_content = f"✅ New Commit:\n{time_comment}---\n{commit_message}"
timestamp = datetime.now().strftime('%Y-%m-%d %H:%M')
notion_blocks = [
{
"object": "block",
"type": "heading_2",
"heading_2": {
"rich_text": [{"type": "text", "text": {"content": f"🤖 Git Commit ({timestamp})"}}]
}
},
{
"object": "block",
"type": "code",
"code": {
"rich_text": [{"type": "text", "text": {"content": report_content}}],
"language": "yaml"
}
}
]
append_blocks_to_notion_page(token, task_id, notion_blocks)
except (FileNotFoundError, json.JSONDecodeError):
sys.exit(0)
if __name__ == "__main__":
main()