From b8d124a2b293d687f2bf462fc9ed7475214aa46d Mon Sep 17 00:00:00 2001 From: Justin Paul Date: Fri, 8 May 2026 11:20:52 -0400 Subject: [PATCH] Wiki sync: stop treating git's stderr as fatal Mirror of github main + this script fix. PowerShell with ErrorActionPreference=Stop was treating git's CRLF / 'remote: Processed N references' stderr lines as script-fatal errors, aborting the sync mid-flight. Switched to Continue + manual exit-code checks, drained stderr on each git call, and disabled core.autocrlf in the throwaway clone. Co-Authored-By: Claude Opus 4.7 (1M context) --- scripts/sync-wiki.ps1 | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/scripts/sync-wiki.ps1 b/scripts/sync-wiki.ps1 index 87b53ae..d62268b 100644 --- a/scripts/sync-wiki.ps1 +++ b/scripts/sync-wiki.ps1 @@ -44,7 +44,12 @@ param( [string]$AuthorEmail = 'noreply@jpaul.me' ) -$ErrorActionPreference = 'Stop' +# Continue (not Stop) because git writes informational messages to stderr +# (CRLF warnings, "remote: Processed N references" etc.) which PowerShell 5.1 +# escalates to a script-fatal error under Stop. We check $LASTEXITCODE +# manually after each git call instead. +$ErrorActionPreference = 'Continue' + $repoRoot = Split-Path -Parent $PSScriptRoot $docsDir = Join-Path $repoRoot 'docs' $workDir = Join-Path $env:TEMP ("webhook-wiki-{0}" -f ([guid]::NewGuid().ToString('N').Substring(0, 8))) @@ -98,10 +103,14 @@ function New-Sidebar() { # 1. Clone the wiki. Write-Host "Cloning wiki to $workDir..." -git clone --quiet $WikiUrl $workDir +& git clone --quiet $WikiUrl $workDir 2>&1 | Out-Null if ($LASTEXITCODE -ne 0) { throw "git clone failed. Has the wiki been initialized? Visit the repo's Wiki tab and create the first page via the UI before running this script." } +# Suppress git's CRLF nags for this throwaway clone so they don't become +# "errors" via PowerShell's native-command stderr handling. +& git -C $workDir config core.autocrlf false 2>&1 | Out-Null +& git -C $workDir config core.safecrlf false 2>&1 | Out-Null try { Push-Location $workDir @@ -128,16 +137,19 @@ try { # 4. Sidebar Set-Content -LiteralPath (Join-Path $workDir '_Sidebar.md') -Value (New-Sidebar) -Encoding utf8 -NoNewline - # 5. Commit + push if anything actually changed. - git add -A - $changes = git status --porcelain + # 5. Commit + push if anything actually changed. Drain stderr from each + # git invocation so PowerShell doesn't treat warnings as errors. + & git add -A 2>&1 | Out-Null + $changes = & git status --porcelain 2>&1 if (-not $changes) { Write-Host "Wiki already up to date." return } - $sha = git -C $repoRoot rev-parse --short HEAD - git -c "user.name=$AuthorName" -c "user.email=$AuthorEmail" commit -q -m "Sync from docs/ at $sha" - git push --quiet + $sha = & git -C $repoRoot rev-parse --short HEAD 2>&1 + & git -c "user.name=$AuthorName" -c "user.email=$AuthorEmail" commit -q -m "Sync from docs/ at $sha" 2>&1 | Out-Null + if ($LASTEXITCODE -ne 0) { throw "git commit failed (exit $LASTEXITCODE)" } + & git push --quiet 2>&1 | Out-Null + if ($LASTEXITCODE -ne 0) { throw "git push failed (exit $LASTEXITCODE)" } Write-Host "Pushed updated wiki." } finally { Pop-Location } -- 2.52.0