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()