refactor: 入口改名(Backup/Restore -> Backup-Data/Restore-Data)+ 只留一轮的垫片
git mv 保留历史。旧名字留薄垫片:入口脚本是**外部接口**(README 二十多处引用、使用者的肌肉记忆、注册脚本里的路径),内部实现改名断了会当场报错,外部接口改名断了是静默没用 —— 后者对备份工具尤其不能接受(ADR-0012)。 垫片踩到四个坑,全部由门禁报出(E2E 与 Pester 集成用例本来就是通过子进程调这两个入口的,于是它们原封不动成了垫片的验收):① `& script.ps1` 里子脚本的 exit 不会把退出码传到父脚本的 $LASTEXITCODE —— 会把失败变成成功,而计划任务靠退出码判断成败;② 调用方传 -Verbose 时垫片里的 Import-Module 会多打一行加载信息,顶掉测试的输出断言;③ 不重定向时子进程的输出到不了调用方(父进程的 stdout 常常是管道,而 .NET 起的进程默认只继承控制台)—— 改成显式重定向 + 异步读转发(同步先读 stdout 再读 stderr 会在管道写满时死锁);④ **`[CmdletBinding()]` 会把 -Verbose 当通用参数绑走,它不会落进 $Rest,于是没被转发给子进程** —— 而测试正是靠 -Verbose 拿那条 VERBOSE 级日志的。现在显式把 -Verbose / -Debug 加进转发参数。 参数引号化用模块自己的 ConvertTo-BakNRetNativeArgumentString(5.1 上 ProcessStartInfo.ArgumentList 不存在)。tools\Register-BackupTask.ps1 已同步改指 Backup-Data.ps1(4 处)。 门禁新增一条机械检查:**源码里不得出现"左边空的赋值"** —— 它是"用双引号拼代码导致 $变量 被插值成空"那个坑的指纹(合法语法、Parse 层抓不到、只有跑到才炸,同一块代码里出现过五次)。垫片全部用单引号 here-string 生成,零插值。 验收:test.ps1 9/9 全绿(5.1 与 7);真实清单只读冒烟 4/4。
This commit is contained in:
1 parent
5df40d3341
commit
4e3c0461c0
6 files changed
+1824
-1678
No files matched your search
@@ -1685,6 +1685,24 @@ Test-Case '清单编辑器:脚本驱动走完"选行→改方向→保存",
|
||||
}
|
||||
}
|
||||
|
||||
Test-Case '源码里不得出现"左边空的赋值"(用脚本生成代码时插值把左边吃掉的指纹)' {
|
||||
# 这条检查是为一个反复出现的坑立的:用双引号拼一段 PowerShell 代码时,$变量 会在**生成脚本
|
||||
# 的那一刻**被插值成空,写出来的文件里就出现 ` = 'SilentlyContinue'` 这种行 —— 而它是
|
||||
# **合法语法**(等于调用一个叫 'SilentlyContinue' 的命令),Parse 层抓不到,只有跑到那一步
|
||||
# 才炸。这个坑在同一块代码里出现过五次、症状每次都不一样,所以不再靠"我记得"。
|
||||
$repoRoot = Split-Path -Parent $PSScriptRoot
|
||||
$skip = '\\(\.git|\.tools|\.scratch|Backups|logs|dist)\\'
|
||||
$offenders = @()
|
||||
foreach ($file in @(Get-ChildItem -LiteralPath $repoRoot -Recurse -File -Include *.ps1, *.psm1 | Where-Object { $_.FullName -notmatch $skip })) {
|
||||
$number = 0
|
||||
foreach ($line in @(Get-Content -Encoding UTF8 -LiteralPath $file.FullName)) {
|
||||
$number++
|
||||
if ($line.TrimStart() -match '^=\s') { $offenders += ($file.Name + ':' + $number + ' ' + $line.Trim()) }
|
||||
}
|
||||
}
|
||||
Assert-Equal 0 $offenders.Count ('这些行看起来是赋值、左边却是空的:' + ($offenders -join ' / '))
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
Remove-Item -LiteralPath $sandbox -Recurse -Force -ErrorAction SilentlyContinue
|
||||
Remove-Item -LiteralPath $itemSandbox -Recurse -Force -ErrorAction SilentlyContinue
|
||||
|
||||
Reference in new issue
Block a user