Files
Juliet/misc/clean_unity.ps1
T
2026-07-23 13:00:01 -04:00

62 lines
2.3 KiB
PowerShell

# clean_unity.ps1 - Manages Unity files content hashing and change detection
param(
[string]$Action = "Finish"
)
if (-not (Test-Path "Intermediate")) { New-Item -ItemType Directory -Path "Intermediate" | Out-Null }
$hashFile = "Intermediate\unity_hashes.tmp"
if ($Action -eq "Start") {
# Compute SHA256 hashes of all existing Unity files before FASTBuild runs
$hashes = @{}
Get-ChildItem -Path "Intermediate" -Recurse -Filter "*_Unity*.cpp" -ErrorAction SilentlyContinue | ForEach-Object {
$hash = (Get-FileHash -Path $_.FullName -Algorithm SHA256).Hash
$hashes[$_.FullName] = $hash
}
$hashes | ConvertTo-Json | Set-Content -Path $hashFile -ErrorAction SilentlyContinue
}
elseif ($Action -eq "Finish") {
$oldHashes = @{}
if (Test-Path $hashFile) {
try {
$json = Get-Content $hashFile -Raw -ErrorAction SilentlyContinue
if ($json) {
$obj = $json | ConvertFrom-Json
foreach ($prop in $obj.PSObject.Properties) {
$oldHashes[$prop.Name] = $prop.Value
}
}
} catch {}
Remove-Item $hashFile -ErrorAction SilentlyContinue
}
# Clean '#pragma message' from generated Unity files if present
Get-ChildItem -Path "Intermediate" -Recurse -Filter "*_Unity*.cpp" -ErrorAction SilentlyContinue | ForEach-Object {
$filePath = $_.FullName
$lines = [System.IO.File]::ReadAllLines($filePath)
$filtered = $lines | Where-Object { $_ -notlike '*#pragma message*' }
if ($lines.Count -ne $filtered.Count) {
[System.IO.File]::WriteAllLines($filePath, $filtered)
}
}
# Detect if any Unity file is new or has changed content
$unityChanged = "0"
$currentFiles = Get-ChildItem -Path "Intermediate" -Recurse -Filter "*_Unity*.cpp" -ErrorAction SilentlyContinue
if (-not $currentFiles) {
$unityChanged = "1"
} else {
foreach ($file in $currentFiles) {
$path = $file.FullName
$newHash = (Get-FileHash -Path $path -Algorithm SHA256).Hash
if (-not $oldHashes.ContainsKey($path) -or $oldHashes[$path] -ne $newHash) {
$unityChanged = "1"
break
}
}
}
Set-Content -Path "Intermediate\unity_changed.tmp" -Value $unityChanged
}