71 lines
1.8 KiB
PowerShell
71 lines
1.8 KiB
PowerShell
#!/usr/bin/env pwsh
|
|
# remove-stale-refs.ps1 - Remove stale project references that don't exist
|
|
|
|
param([string]$SlnPath = "src/StellaOps.sln")
|
|
|
|
$content = Get-Content $SlnPath -Raw
|
|
$lines = $content -split "`r?`n"
|
|
|
|
# Stale project paths (relative from solution location)
|
|
$staleProjects = @(
|
|
"__Tests\AirGap\StellaOps.AirGap.Controller.Tests",
|
|
"__Tests\AirGap\StellaOps.AirGap.Importer.Tests",
|
|
"__Tests\AirGap\StellaOps.AirGap.Time.Tests",
|
|
"__Tests\StellaOps.Gateway.WebService.Tests",
|
|
"__Tests\Graph\StellaOps.Graph.Indexer.Tests",
|
|
"Scanner\StellaOps.Scanner.Analyzers.Native",
|
|
"__Libraries\__Tests\StellaOps.Signals.Tests",
|
|
"__Tests\StellaOps.Audit.ReplayToken.Tests",
|
|
"__Tests\StellaOps.Router.Gateway.Tests",
|
|
"__Libraries\StellaOps.Cryptography"
|
|
)
|
|
|
|
$staleGuids = @()
|
|
$newLines = @()
|
|
$skipNext = $false
|
|
|
|
for ($i = 0; $i -lt $lines.Count; $i++) {
|
|
$line = $lines[$i]
|
|
|
|
if ($skipNext) {
|
|
$skipNext = $false
|
|
continue
|
|
}
|
|
|
|
$isStale = $false
|
|
foreach ($stalePath in $staleProjects) {
|
|
if ($line -like "*$stalePath*") {
|
|
# Extract GUID
|
|
if ($line -match '\{([A-F0-9-]+)\}"?$') {
|
|
$staleGuids += $Matches[1]
|
|
}
|
|
Write-Host "Removing stale: $stalePath"
|
|
$isStale = $true
|
|
$skipNext = $true
|
|
break
|
|
}
|
|
}
|
|
|
|
if (-not $isStale) {
|
|
$newLines += $line
|
|
}
|
|
}
|
|
|
|
# Remove GlobalSection references to stale GUIDs
|
|
$finalLines = @()
|
|
foreach ($line in $newLines) {
|
|
$skip = $false
|
|
foreach ($guid in $staleGuids) {
|
|
if ($line -match $guid) {
|
|
$skip = $true
|
|
break
|
|
}
|
|
}
|
|
if (-not $skip) {
|
|
$finalLines += $line
|
|
}
|
|
}
|
|
|
|
$finalLines -join "`r`n" | Set-Content $SlnPath -Encoding UTF8 -NoNewline
|
|
Write-Host "Removed $($staleGuids.Count) stale project references"
|