Build system: a failed first build forces full rebuilds, and clean breaks a running watch
维护者通常 1 天内回复
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 52/100
- Issue 类型
- 缺陷
- 描述清晰度
- 描述清楚
- 活跃度
- 活跃
- 领域
- build-system
调研方向
Start with compiler_info.ml:133-136 and build.ml:452-457 to trace when compiler metadata is checked and written after a failed build. Then inspect clean.ml:83 and how lib/watch.lock is used by the watcher; build.ml:556-558 shows where the raw error is printed. Done means failed builds no longer trigger repeated full cleans and running watches recover or are protected from concurrent clean operations.
由索引模型根据 Issue 内容生成。
描述
Two ways the build system loses or misreads its state in lib/. Both reproduce with rescript 13.0.0-alpha.8 (found while reviewing #9238).
1. After a failed first build, every build cleans everything
# src/A.res: let x: int = "s" src/B.res: let y = 1
rescript build # Cleaned 0/0 … exit 1
rescript build # Cleaned previous build due to compiler update / Cleaned 0/1 / Compiled 2 modules, exit 1
rescript build # same again
Every build after the first failed one wipes lib/bs and lib/ocaml and recompiles all modules (B as well), with a misleading "compiler update" message, until a build succeeds.
compiler_info.ml:133-136 (needs_clean) treats an existing lib/ocaml/.compiler.log without compiler-info.json as a stale build, but compiler-info.json is only written after a successful build (build.ml:452-457).
2. rescript clean while rescript watch runs breaks the watcher
# src/A.res: let x = 1 src/B.res: let y = A.x
rescript watch &
rescript clean # Cleaning x, exit 0
# edit src/A.res
Every later rebuild fails with Sys_error("<root>/lib/ocaml/A.ast: No such file or directory"), and the watcher never recovers.
clean.ml:83 only takes the build lock, which the watcher holds only while it builds. clean should refuse while lib/watch.lock is held (or the watcher should rebuild from scratch when its outputs disappear). The raw Sys_error is printed by build.ml:556-558.
- 主要语言
- OCaml
- 星标
- 7.5k
- 派生
- 485
- 平均合并
- 16 小时 51 分钟
- 30 天内合并 PR
- 268
环境准备
在浏览器里用你自己的 GitHub 账号启动这个项目的开发容器。
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
rescript-lang/rescript 的其他 Issue
-
Exception analysis does not know the Temporal `fromStringOrThrow` functions可能已有人在做 @cknitt 于 3 天前认领。 未关闭
难度 2/5 1-3 小时 新手友好度 72/100
rescript-lang/rescript#9182 ·
维护者通常 1 天内回复
-
Build system: make output wording and labels consistent可能已有人在做 关联的 PR 仍在进行中或已合并。 未关闭
难度 4/5 3-5 天 新手友好度 48/100
rescript-lang/rescript#9244 ·
维护者通常 1 天内回复
-
rescript format: aborts on a syntax error, unstable output, raw compiler errors可能已有人在做 关联的 PR 仍在进行中或已合并。 未关闭
难度 4/5 3-5 天 新手友好度 56/100
rescript-lang/rescript#9243 ·
维护者通常 1 天内回复
-
Build system CLI: behavior that disagrees with the help text可能已有人在做 关联的 PR 仍在进行中或已合并。 未关闭
难度 4/5 3-5 天 新手友好度 43/100
rescript-lang/rescript#9242 ·
维护者通常 1 天内回复
-
难度 4/5 3-5 天 新手友好度 54/100
rescript-lang/rescript#9239 ·
维护者通常 1 天内回复
查看 rescript-lang/rescript 的全部 Issue
相似的 Issue
-
priority: low tests
难度 2/5 1-3 小时 新手友好度 82/100
TMHSDigital/Free-Game-Dev-Assets#265 ·
维护者通常 1 天内回复
-
package-update
难度 2/5 1-3 小时 新手友好度 65/100
维护者通常 1 天内回复
-
cleanup documentation
难度 2/5 1-3 小时 新手友好度 72/100
维护者通常 2 天内回复
-
backend Setup
难度 2/5 1-3 小时 新手友好度 65/100
MatthewJ121/NutriGator#64 ·
维护者通常 1 天内回复
-
难度 1/5 1 小时以内 新手友好度 92/100
crossbario/crossbar#2383 ·
维护者通常 1 天内回复