534b0cde91
Add logic to initialize at least one user if the startup wizard is not completed, both during application startup and in the startup user API. After user creation, reload the user entity with all related navigation properties to ensure the in-memory user object is fully populated. Also update build and publish metadata files.
196 lines
5.3 KiB
PowerShell
196 lines
5.3 KiB
PowerShell
#!/usr/bin/env pwsh
|
|
<#
|
|
.SYNOPSIS
|
|
Fixes StyleCop warnings in C# files.
|
|
|
|
.DESCRIPTION
|
|
Automatically fixes common StyleCop warnings:
|
|
- SA1413: Adds trailing commas to multi-line initializers
|
|
- SA1515: Adds blank lines before single-line comments
|
|
- SA1518: Ensures files end with single newline
|
|
|
|
.PARAMETER Path
|
|
The root path to search for C# files. Defaults to "MediaBrowser.Model"
|
|
|
|
.PARAMETER DryRun
|
|
If specified, shows what would be changed without actually modifying files
|
|
|
|
.EXAMPLE
|
|
.\FixStyleCopWarnings.ps1 -DryRun
|
|
#>
|
|
|
|
param(
|
|
[string]$Path = "MediaBrowser.Model",
|
|
[switch]$DryRun
|
|
)
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
function Fix-TrailingCommas {
|
|
param([string]$Content)
|
|
|
|
$modified = $false
|
|
$lines = $content -split '\r?\n'
|
|
|
|
for ($i = 0; $i -lt $lines.Length - 1; $i++) {
|
|
$currentLine = $lines[$i]
|
|
$nextLine = $lines[$i + 1]
|
|
|
|
# Check if current line ends with a property/value without comma
|
|
# and next line closes the initializer
|
|
if ($currentLine -match '^\s+\w+\s*=\s*.+[^,]\s*$' -and $nextLine -match '^\s*[}\)]') {
|
|
$lines[$i] = $currentLine.TrimEnd() + ','
|
|
$modified = $true
|
|
}
|
|
}
|
|
|
|
if ($modified) {
|
|
return ($lines -join "`n")
|
|
}
|
|
|
|
return $Content
|
|
}
|
|
|
|
function Fix-BlankLinesBeforeComments {
|
|
param([string]$Content)
|
|
|
|
$modified = $false
|
|
$lines = $content -split '\r?\n'
|
|
$newLines = @()
|
|
|
|
for ($i = 0; $i -lt $lines.Length; $i++) {
|
|
$currentLine = $lines[$i]
|
|
|
|
# Check if this is a single-line comment
|
|
if ($currentLine -match '^\s+//\s+\w') {
|
|
# Check if previous line exists and is not blank
|
|
if ($i -gt 0) {
|
|
$prevLine = $lines[$i - 1]
|
|
$prevLineIsBlank = [string]::IsNullOrWhiteSpace($prevLine)
|
|
$prevLineIsOpenBrace = $prevLine -match '\{\s*$'
|
|
$prevLineIsComment = $prevLine -match '^\s*//'
|
|
|
|
# Add blank line if previous line is not blank, not open brace, not another comment
|
|
if (-not $prevLineIsBlank -and -not $prevLineIsOpenBrace -and -not $prevLineIsComment) {
|
|
$newLines += ""
|
|
$modified = $true
|
|
}
|
|
}
|
|
}
|
|
|
|
$newLines += $currentLine
|
|
}
|
|
|
|
if ($modified) {
|
|
return ($newLines -join "`n")
|
|
}
|
|
|
|
return $Content
|
|
}
|
|
|
|
function Fix-FileEnding {
|
|
param([string]$Content)
|
|
|
|
# Ensure file ends with exactly one newline
|
|
$trimmed = $Content.TrimEnd("`r", "`n", " ", "`t")
|
|
return $trimmed + "`n"
|
|
}
|
|
|
|
function Fix-StyleCopWarnings {
|
|
param(
|
|
[string]$FilePath,
|
|
[switch]$DryRun
|
|
)
|
|
|
|
$content = Get-Content -Path $FilePath -Raw
|
|
$originalContent = $content
|
|
|
|
# Apply fixes
|
|
$content = Fix-TrailingCommas -Content $content
|
|
$content = Fix-BlankLinesBeforeComments -Content $content
|
|
$content = Fix-FileEnding -Content $content
|
|
|
|
# Restore Windows line endings if original had them
|
|
if ($originalContent -match '\r\n') {
|
|
$content = $content -replace '(?<!\r)\n', "`r`n"
|
|
}
|
|
|
|
if ($content -ne $originalContent) {
|
|
if ($DryRun) {
|
|
Write-Host " [DRY-RUN] Would fix StyleCop warnings" -ForegroundColor Cyan
|
|
return $true
|
|
}
|
|
|
|
[System.IO.File]::WriteAllText($FilePath, $content, [System.Text.UTF8Encoding]::new($false))
|
|
Write-Host " [FIXED]" -ForegroundColor Green
|
|
return $true
|
|
}
|
|
|
|
Write-Host " [SKIP] No warnings to fix" -ForegroundColor Gray
|
|
return $false
|
|
}
|
|
|
|
# Main script
|
|
Write-Host ("=" * 80) -ForegroundColor Cyan
|
|
Write-Host "StyleCop Warning Fixer" -ForegroundColor Cyan
|
|
Write-Host ("=" * 80) -ForegroundColor Cyan
|
|
Write-Host
|
|
|
|
if ($DryRun) {
|
|
Write-Host "DRY RUN MODE - No files will be modified" -ForegroundColor Yellow
|
|
Write-Host
|
|
}
|
|
|
|
if (-not (Test-Path $Path)) {
|
|
Write-Error "Path not found: $Path"
|
|
exit 1
|
|
}
|
|
|
|
$files = Get-ChildItem -Path $Path -Filter "*.cs" -Recurse | Where-Object {
|
|
$_.FullName -notmatch "\\obj\\" -and
|
|
$_.FullName -notmatch "\\bin\\"
|
|
}
|
|
|
|
Write-Host "Found $($files.Count) C# files in $Path" -ForegroundColor Cyan
|
|
Write-Host
|
|
|
|
$fixedCount = 0
|
|
$skippedCount = 0
|
|
$errorCount = 0
|
|
|
|
foreach ($file in $files) {
|
|
$relativePath = $file.FullName.Replace((Get-Location).Path, "").TrimStart([char]92, [char]47)
|
|
Write-Host "[Processing] $relativePath" -ForegroundColor White
|
|
|
|
try {
|
|
$fixed = Fix-StyleCopWarnings -FilePath $file.FullName -DryRun:$DryRun
|
|
if ($fixed) {
|
|
$fixedCount++
|
|
} else {
|
|
$skippedCount++
|
|
}
|
|
}
|
|
catch {
|
|
Write-Host " [ERROR] $_" -ForegroundColor Red
|
|
$errorCount++
|
|
}
|
|
}
|
|
|
|
Write-Host
|
|
Write-Host ("=" * 80) -ForegroundColor Cyan
|
|
Write-Host "Summary:" -ForegroundColor Cyan
|
|
Write-Host ("=" * 80) -ForegroundColor Cyan
|
|
Write-Host " Total files: $($files.Count)" -ForegroundColor White
|
|
Write-Host " Fixed: $fixedCount" -ForegroundColor Green
|
|
Write-Host " Skipped: $skippedCount" -ForegroundColor Gray
|
|
Write-Host " Errors: $errorCount" -ForegroundColor Red
|
|
|
|
if ($DryRun) {
|
|
Write-Host
|
|
Write-Host "This was a DRY RUN. Run without -DryRun to apply changes." -ForegroundColor Yellow
|
|
}
|
|
|
|
Write-Host ("=" * 80) -ForegroundColor Cyan
|
|
|
|
exit $errorCount
|