62 lines
2.3 KiB
PowerShell
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
|
|
}
|