2 Commits

Author SHA1 Message Date
justin b3f9415bae v0.1.4 2026-05-08 12:31:43 -04:00
justin ad221d368e Fix Rollback NRE: capture filename before refreshing the checkpoint list
The actual restore on the service was succeeding but the GUI showed
"Rollback failed: Object reference not set to an instance of an object."
because RefreshAsync clears the ObservableCollection, the SelectedItem
binding goes null when its source item disappears, and the next line
dereferenced Selected!.FileName.

Cache the filename and timestamp before any await so the post-refresh
status update doesn't depend on Selected still being non-null.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 12:29:32 -04:00
+2 -34
View File
@@ -53,46 +53,14 @@ if ($LASTEXITCODE -ne 0) { throw 'service publish failed' }
-c $Configuration -r win-x64 --self-contained false -o $publishGui | Out-Host -c $Configuration -r win-x64 --self-contained false -o $publishGui | Out-Host
if ($LASTEXITCODE -ne 0) { throw 'GUI publish failed' } if ($LASTEXITCODE -ne 0) { throw 'GUI publish failed' }
# 2. Pre-flight: confirm every source path the .iss references exists, and # 2. Compile installer.
# surface the longest path so MAX_PATH issues are obvious in the log.
function Show-SourcePath($label, $path, [switch]$Recursive) {
if (-not (Test-Path $path)) { Write-Warning "MISSING $label : $path"; return }
$items = if ($Recursive) {
Get-ChildItem $path -Recurse -File -ErrorAction SilentlyContinue
} else {
Get-ChildItem $path -File -ErrorAction SilentlyContinue
}
$count = ($items | Measure-Object).Count
$longest = ($items | Measure-Object -Maximum -Property { $_.FullName.Length }).Maximum
Write-Host (" {0,-30} files={1,-5} longestPath={2,-5} root={3}" -f $label, $count, $longest, $path)
}
Write-Host ""
Write-Host "--- pre-flight: source paths the .iss will read ---" -ForegroundColor Cyan
Show-SourcePath 'publish\service' $publishSvc -Recursive
Show-SourcePath 'publish\gui' $publishGui -Recursive
Show-SourcePath 'scripts' (Join-Path $repoRoot 'scripts')
Show-SourcePath 'scripts\examples' (Join-Path $repoRoot 'scripts\examples') -Recursive
Show-SourcePath 'docs' (Join-Path $repoRoot 'docs') -Recursive
Show-SourcePath 'resources' (Join-Path $repoRoot 'resources')
Show-SourcePath 'README.md (file)' (Join-Path $repoRoot 'README.md')
$lpe = (Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem' `
-Name LongPathsEnabled -ErrorAction SilentlyContinue).LongPathsEnabled
Write-Host " LongPathsEnabled (HKLM): $lpe"
Write-Host ""
# 3. Compile installer.
$iscc = Find-InnoCompiler $iscc = Find-InnoCompiler
$iss = Join-Path $repoRoot 'installer\webhook-server.iss' $iss = Join-Path $repoRoot 'installer\webhook-server.iss'
$dist = Join-Path $repoRoot 'dist' $dist = Join-Path $repoRoot 'dist'
New-Item -ItemType Directory -Path $dist -Force | Out-Null New-Item -ItemType Directory -Path $dist -Force | Out-Null
Write-Host "Compiling installer with $iscc" Write-Host "Compiling installer with $iscc"
# /Qp gives quiet output but still prints the line each source file matches, & $iscc "/DAppVersion=$version" $iss
# which surfaces the exact source path that ISCC fails on (the default mode
# only logs "The system cannot find the path specified." with no detail).
& $iscc "/DAppVersion=$version" "/Qp" $iss
if ($LASTEXITCODE -ne 0) { throw 'Inno Setup compile failed' } if ($LASTEXITCODE -ne 0) { throw 'Inno Setup compile failed' }
$out = Get-Item (Join-Path $dist "WebhookServer-Setup-$version.exe") $out = Get-Item (Join-Path $dist "WebhookServer-Setup-$version.exe")