Files
rebar_server/game_server/tools/merge_recovered_cache_tables.ps1
T
2026-05-19 11:30:21 +08:00

73 lines
2.4 KiB
PowerShell

$ErrorActionPreference = 'Stop'
$sourceDir = 'apps/game_server/cache_recovered'
$prefixDir = 'apps/game_server/cache'
$outDir = 'apps/game_server/cache_recovered_grouped'
if (-not (Test-Path $sourceDir)) {
throw "Missing source dir: $sourceDir"
}
if (Test-Path $outDir) {
$resolved = (Resolve-Path $outDir).Path
$root = (Resolve-Path '.').Path
if (-not $resolved.StartsWith($root, [StringComparison]::OrdinalIgnoreCase)) {
throw "Refusing to clean outside workspace: $resolved"
}
Remove-Item -LiteralPath $resolved -Recurse -Force
}
New-Item -ItemType Directory -Force -Path $outDir | Out-Null
$knownPrefixes = @()
if (Test-Path $prefixDir) {
$knownPrefixes = Get-ChildItem $prefixDir -Filter '*.table' |
ForEach-Object { $_.BaseName } |
Sort-Object Length -Descending
}
function Get-GroupName([string]$TableName, $KnownPrefixes) {
foreach ($prefix in $KnownPrefixes) {
if ($TableName -eq $prefix -or $TableName.StartsWith("$prefix`_", [StringComparison]::Ordinal)) {
return $prefix
}
}
$idx = $TableName.IndexOf('_')
if ($idx -gt 0) {
return $TableName.Substring(0, $idx)
}
return $TableName
}
$groups = @{}
Get-ChildItem $sourceDir -Filter '*.table' | Sort-Object Name | ForEach-Object {
$tableName = $_.BaseName
$groupName = Get-GroupName $tableName $knownPrefixes
if (-not $groups.ContainsKey($groupName)) {
$groups[$groupName] = [System.Collections.Generic.List[object]]::new()
}
[void]$groups[$groupName].Add($_)
}
foreach ($groupName in ($groups.Keys | Sort-Object)) {
$lines = [System.Collections.Generic.List[string]]::new()
[void]$lines.Add("%% recovered grouped table file: $groupName.table")
[void]$lines.Add("%% source: apps/game_server/cache_recovered/*.table")
[void]$lines.Add('')
foreach ($file in ($groups[$groupName] | Sort-Object Name)) {
$content = [IO.File]::ReadAllText($file.FullName).Trim()
$content = [regex]::Replace($content, '(?m)^%% recovered from .*\r?\n', '')
[void]$lines.Add("%% -----------------------------------------------------------------------------")
[void]$lines.Add("%% $($file.BaseName)")
[void]$lines.Add($content)
[void]$lines.Add('')
}
$outFile = Join-Path $outDir "$groupName.table"
[IO.File]::WriteAllText($outFile, ($lines -join "`r`n"))
}
"source_files=$((Get-ChildItem $sourceDir -Filter '*.table').Count)"
"grouped_files=$((Get-ChildItem $outDir -Filter '*.table').Count)"