# ============================================================ # checkpoint.ps1 # ------------------------------------------------------------ # Wird von checkpoint.cmd aufgerufen. Liest # .checkpoint-pending.txt, haengt einen Eintrag an changelog.md # an (mit aktuellem Timestamp vom lokalen PC), fuehrt einen # Git-Commit aus und loescht die Pending-Datei. # ============================================================ $ErrorActionPreference = 'Stop' # Repo-Root = Ordner, in dem dieses Skript liegt $repoRoot = $PSScriptRoot Set-Location $repoRoot $pendingFile = Join-Path $repoRoot '.checkpoint-pending.txt' $changelogFile = Join-Path $repoRoot 'changelog.md' # --- Pending-Datei lesen ----------------------------------- if (-not (Test-Path $pendingFile)) { Write-Error ".checkpoint-pending.txt nicht gefunden." exit 1 } $lines = Get-Content $pendingFile -Encoding UTF8 if ($lines.Count -lt 2) { Write-Error ".checkpoint-pending.txt muss mindestens 2 Zeilen enthalten (Session, Zusammenfassung)." exit 1 } $session = $lines[0].Trim() $summary = ($lines | Select-Object -Skip 1 | Where-Object { $_.Trim() -ne '' }) -join ' ' $summary = $summary.Trim() if ([string]::IsNullOrWhiteSpace($session)) { Write-Error "Session-Nummer (Zeile 1) ist leer." exit 1 } if ($session -notmatch '^S\d{2,}$') { Write-Error "Session-Nummer '$session' hat nicht das Format S (z.B. S01, S12)." exit 1 } if ([string]::IsNullOrWhiteSpace($summary)) { Write-Error "Zusammenfassung (Zeile 2+) ist leer." exit 1 } # --- Timestamp und Eintrag bauen --------------------------- $timestamp = Get-Date -Format 'yyyy-MM-dd HH:mm' $entry = "$timestamp | $session | $summary" Write-Host "" Write-Host "[checkpoint] Neuer Eintrag:" -ForegroundColor Cyan Write-Host " $entry" Write-Host "" # --- Eintrag an changelog.md anhaengen --------------------- # Immer erst sicherstellen, dass die Datei mit einem Zeilenumbruch endet. $utf8NoBom = New-Object System.Text.UTF8Encoding $false if (Test-Path $changelogFile) { $existing = [System.IO.File]::ReadAllText($changelogFile, $utf8NoBom) if ($existing.Length -gt 0 -and -not ($existing.EndsWith("`n"))) { [System.IO.File]::AppendAllText($changelogFile, "`r`n", $utf8NoBom) } } else { Write-Error "changelog.md nicht gefunden." exit 1 } [System.IO.File]::AppendAllText($changelogFile, $entry + "`r`n", $utf8NoBom) Write-Host "[checkpoint] An changelog.md angehaengt." -ForegroundColor Green # --- Git add + commit -------------------------------------- & git add -A if ($LASTEXITCODE -ne 0) { Write-Error "git add fehlgeschlagen (Exit Code $LASTEXITCODE)." exit $LASTEXITCODE } $commitMsg = "${session}: $summary" & git commit -m $commitMsg if ($LASTEXITCODE -ne 0) { Write-Error "git commit fehlgeschlagen (Exit Code $LASTEXITCODE)." exit $LASTEXITCODE } Write-Host "[checkpoint] Commit erstellt: $commitMsg" -ForegroundColor Green # --- Pending-Datei loeschen -------------------------------- Remove-Item $pendingFile -Force Write-Host "[checkpoint] .checkpoint-pending.txt entfernt." -ForegroundColor Green