Skip to content

fix(preflight): Windows 下测试命令分块运行,规避 cmd.exe 命令行长度上限 - #168

Merged
Thy985 merged 1 commit into
mainfrom
fix/preflight-windows-cmd-length
Aug 25, 2026
Merged

fix(preflight): Windows 下测试命令分块运行,规避 cmd.exe 命令行长度上限#168
Thy985 merged 1 commit into
mainfrom
fix/preflight-windows-cmd-length

Conversation

@Thy985

@Thy985 Thy985 commented Aug 25, 2026

Copy link
Copy Markdown
Owner

fix(preflight): Windows 下测试命令分块运行,规避 cmd.exe 命令行长度上限

关联 issue

改动说明

Whatflutter_app/tool/preflight.sh 的测试命令由单次 flutter test $(find ...) 改为 find -print0 | xargs -0 -r -n 45 分块运行。

Why

  • 原命令用 $(find ...) 显式拼出 171 个测试文件路径(约 7935 字符),加上命令前缀超过 cmd.exe 对 .bat 的 8191 字符命令行上限
  • Windows 下报 命令语法不正确、exit 255,测试步骤无法启动,pre-push 守门必然失败、push 被拦
  • CI(Linux)无此问题,本修复只改本地守门脚本,不改 CI 行为

兼容性

  • 文件集与排除标签不变:test/golden/* 仍按路径排除 + --exclude-tags golden/perf,与 ci.yml Test job 参数一致
  • 分块(每块 45 个文件)结果等价于单次全量运行

测试方式

  1. cd flutter_app && bash tool/preflight.sh
  2. 分块验证:find test -name "*_test.dart" ! -path "test/golden/*" -print0 | xargs -0 -r -n 45 flutter test --no-pub --exclude-tags golden --exclude-tags perf --reporter compact → 4 chunk 全绿(0 失败)

是否影响公共 API

  • 否,仅改本地工具脚本,不改任何 Dart 代码

是否更新文档

  • 否(脚本内注释已说明 Windows 兼容原因)

自检清单(AGENTS.md §5.3)

  • 改动范围与 PR 描述一致(仅 flutter_app/tool/preflight.sh 1 文件)
  • 没有夹带未在 PR 描述中说明的改动
  • flutter analyze --no-fatal-infos --fatal-warnings 通过
  • flutter test(排除 golden/perf)通过 —— 分块验证 4 chunk 全绿(0 失败)
  • flutter build apk --debug / flutter build web(未跑,纯工具脚本改动不影响构建)

Task scope

ROADMAP repo-governance

preflight.sh 用 $(find ...) 显式拼出 171 个测试文件路径(约 7935 字符),
加上命令前缀超过 cmd.exe 对 .bat 的 8191 字符上限,报"命令语法不正确"、
exit 255,导致 pre-push 守门在 Windows 上必然失败、push 被拦。

改为 find -print0 | xargs -0 -r -n 45 分块运行 flutter test,文件集与
排除标签不变(test/golden/* 仍按路径排除 + --exclude-tags golden/perf),
与 ci.yml Test job 参数一致。验证:analyze 通过 + 4 chunk 全绿(0 失败)。

Task scope: ROADMAP repo-governance

Co-Authored-By: AtomCode (deepseek-v4-flash) <noreply@atomgit.com>
@github-actions

github-actions Bot commented Aug 25, 2026

Copy link
Copy Markdown

Claude finished @Thy985's task in 26s —— View job


[Level 0] 快速检查

目的 ✅ 清晰:解决 Windows cmd.exe 对 .bat 的 8191 字符上限(171 个显式路径 ≈7935 字符 + 前缀必超限,报「命令语法不正确」)。Linux CI 不受影响(ci.yml:110 仍用原 $() 语法)。

验证结果

  • 文件集一致 ✅:find test -name "*_test.dart" ! -path "test/golden/*" + --exclude-tags golden --exclude-tags perf,与 ci.yml:110 Test job 完全相同
  • 分块数学 ✅:171/45 = 4 chunks(ceil),与 PR 自检"4 chunk 全绿"匹配
  • 语法合规 ✅:xargs -0 -r -n 45-print0 处理含空格文件名;-r 避免空输入误触发 flutter test-n 45 每块上限
  • 改动范围严格收敛在 flutter_app/tool/preflight.sh 单文件 +6/-3,无夹带

规范:注释充分说明 Windows 兼容原因与字符上限来源;不破坏现有 --quick 早退路径。

最终结论:✅ 可以合并(无 Bug、无规范问题、与 PR 描述一致)

@Thy985
Thy985 merged commit 9e37e86 into main Aug 25, 2026
9 checks passed
@Thy985
Thy985 deleted the fix/preflight-windows-cmd-length branch August 25, 2026 12:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant