From 120cf3584b47c41a9c5ef335d2e6d480a653b345 Mon Sep 17 00:00:00 2001 From: Shuery <2463253700@qq.com> Date: Sun, 27 Sep 2026 10:49:21 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=B8=85=E6=8E=89=E6=94=B9=E9=80=A0?= =?UTF-8?q?=E8=BF=87=E7=A8=8B=E7=95=99=E4=B8=8B=E7=9A=84=E9=99=88=E6=97=A7?= =?UTF-8?q?=E5=BC=95=E7=94=A8=EF=BC=88=E4=BB=A3=E7=A0=81=E6=94=B9=E4=BA=86?= =?UTF-8?q?=E3=80=81=E6=96=87=E6=A1=A3=E8=BF=98=E5=86=99=E7=9D=80=E6=97=A7?= =?UTF-8?q?=E7=9A=84=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 这一轮做的是交付一致性检查:把这一路改掉/移走/删掉的每个符号在全仓(含文档)扫一遍。42 处命中里 38 处是正当的 —— CHANGELOG 与 ADR 里讲“原来是什么”属于历史叙述,test 里的 Assert-FileExists 是因为我只抑制了误判而没有改名。剩下的 4 处是真陈旧: * README 还在配置表里写着 CatalogMaxDepth,而那个配置项上一轮已经整条移除; * Get-BakNRetItemArchiveName 的 param 里还留着一个内联的 [int]$MaxDepth = 5(上一轮的删除按行匹配,没覆盖到这种写在同一行的参数),它已经没有任何调用方传值; * tools\lab\README.md 与 docs\agents\domain.md 还写着模块叫 Common.psm1。 这正是这次改造从头到尾在抓的毛病:文档承诺的东西,代码已经不做了。区别是多了一个可执行的检查 —— 符号改名/删除之后,全仓扫一遍旧名字。 验收:test.ps1 9/9 全绿(7 与 5.1)、真实清单只读冒烟 4/4。 --- BakNRet/Public/Get-BakNRetItemArchiveName.ps1 | 2 +- README.md | 3 +-- docs/agents/domain.md | 4 ++-- tools/lab/README.md | 4 ++-- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/BakNRet/Public/Get-BakNRetItemArchiveName.ps1 b/BakNRet/Public/Get-BakNRetItemArchiveName.ps1 index 301de4c..a760948 100644 --- a/BakNRet/Public/Get-BakNRetItemArchiveName.ps1 +++ b/BakNRet/Public/Get-BakNRetItemArchiveName.ps1 @@ -10,7 +10,7 @@ * 条目本来就写的是字面路径(含分隔符或 %变量%)时也用路径命名算法, 这样现有清单不需要改写就能继续工作。 #> - param($Entry, [string]$CatalogPath, [int]$MaxDepth = 5) + param($Entry, [string]$CatalogPath) # @pathname 时用"真实路径"跑路径命名算法。 # 清单里写的可能是软件名,必须先经名录换成真实路径, diff --git a/README.md b/README.md index a0cac1b..7d65f91 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# BakNRet +# BakNRet 把 `BackupList.txt` 里列出的软件 / 目录用 **7-Zip** 打包进 `Backups/`,并且能用 `Restore.ps1` 原样恢复的 Windows 备份工具。 @@ -163,7 +163,6 @@ LogDir = 'logs' SnapshotDir = 'Backups\snapshots' SoftwareCatalog = 'SoftwareCatalog.psd1' - CatalogMaxDepth = 5 # 前缀补全时最多向下找几层 MinFreeSpaceGB = 5 VerifyArchive = $true # 归档后跑 7z t ComputeHash = $false # 是否额外算 SHA256(大归档很慢) diff --git a/docs/agents/domain.md b/docs/agents/domain.md index a0e1c7d..c2b8eef 100644 --- a/docs/agents/domain.md +++ b/docs/agents/domain.md @@ -1,4 +1,4 @@ -# 领域文档 +# 领域文档 探索代码之前,工程技能应当怎么消费本仓库的领域文档。 @@ -21,7 +21,7 @@ ├── CONTEXT.md ← 术语表 / 领域模型(尚不存在,懒创建) ├── docs/adr/ ← 决策记录(尚不存在,懒创建) │ └── 0001-....md -├── Common.psm1 ← 公共模块:日志、清单解析、名录、归档布局、安全描述符 +├── BakNRet\BakNRet.psd1 ← 公共模块:日志、清单解析、名录、归档布局、安全描述符 ├── Backup.ps1 ← 备份入口 ├── Restore.ps1 ← 恢复入口 ├── BackupList.txt ← 唯一「要处理什么」的来源 diff --git a/tools/lab/README.md b/tools/lab/README.md index 3f66f73..d25c372 100644 --- a/tools/lab/README.md +++ b/tools/lab/README.md @@ -132,7 +132,7 @@ gsudo pwsh -NoProfile -File .\tools\lab\Lab.ps1 reset # 秒回 clean-baseli 9. VM 是**未激活**的 Windows:会有水印,个性化受限,功能测试不受影响。 10. **PowerShell Direct 的默认端点是 Windows PowerShell 5.1**(不是 7)。要在 VM 里跑 7 的代码 必须显式 `Start-Process pwsh.exe`(`Lab.ps1` 就是这么做的)。5.1 还读不了仓库里无 BOM 的 - UTF-8 脚本(见下「已知问题」),`Import-Module C:\BakNRet\Common.psm1` 会报一串「缺少右 }」。 + UTF-8 脚本(见下「已知问题」),`Import-Module C:\BakNRet\BakNRet\BakNRet.psd1` 会报一串「缺少右 }」。 ## 已知问题与规避 @@ -180,7 +180,7 @@ Get-Content -LiteralPath out.txt -Encoding UTF8 如果希望产品层面自动发现,可以在「源未更新」的判断里带上「本次解析出的 roots/layouts 是否与 manifest 记录的一致」,不一致就不要跳过。### 仓库里的 PowerShell 文件是「UTF-8 无 BOM」 -`Backup.ps1` / `Common.psm1` 等都没有 BOM(开头字节是 `3C 23 0A` = `<#` + 换行)。 +`Backup.ps1` / `BakNRet\BakNRet.psd1` 等都没有 BOM(开头字节是 `3C 23 0A` = `<#` + 换行)。 PowerShell 7 默认按 UTF-8 读,没问题;**Windows PowerShell 5.1 会把无 BOM 文件按 ANSI(GBK) 读**, 中文注释会被拆出错字节,甚至报「语句块或类型定义中缺少右 }」这类假解析错误。 要么给这些文件加 BOM,要么在文档里明确只支持 PowerShell 7。