Skip to content

Comments

增强Bazel循环依赖检测机制#133

Merged
WhiteElephant-abc merged 1 commit intomainfrom
opencode/issue116-20260124182119
Jan 24, 2026
Merged

增强Bazel循环依赖检测机制#133
WhiteElephant-abc merged 1 commit intomainfrom
opencode/issue116-20260124182119

Conversation

@opencode-agent
Copy link
Contributor

增强 Bazel 构建系统的循环依赖检测机制

修改内容

文件修改: rule/process_mcfunction.bzl:21-125

process_mcfunction 规则中增强了循环依赖检测机制,主要改进包括:

  1. 扩展 DataPackInfo Provider

    • 新增 transitive_pack_ids 字段,用于记录数据包传递依赖闭包中的所有包ID
    • 保持向后兼容性,确保现有构建不受影响
  2. 实施循环依赖检测逻辑

    • 在处理数据包依赖时,检查当前包ID是否已出现在依赖的传递闭包中
    • 检测直接循环依赖(A→B→A)和间接循环依赖(A→B→C→A)
    • 包含自依赖检查作为额外防护层
  3. 错误报告机制

    • 发现循环依赖时,通过 fail() 提供清晰的错误信息
    • 错误信息明确指出循环依赖的具体包和路径

技术实现

  • 使用字典记录传递依赖包ID集合,确保唯一性
  • 处理向后兼容性:旧版本 Provider 可能缺少 transitive_pack_ids 字段
  • 将自身的包ID包含在传递闭包中(自反性)
  • 在构建时而非运行时检测循环,防止隐式循环导致的构建问题

验证测试

修改后的规则已通过以下构建测试:

  • //subprojects/datapack-function-library - 基础数据包
  • //subprojects/auto-lucky-block - 依赖其他数据包的数据包

影响范围

此修改增强了 Bazel 构建系统对数据包间依赖关系的静态分析能力,能够:

  • 防止构建时出现隐式循环依赖
  • 提前发现潜在的依赖结构问题
  • 保持与现有数据包构建的完全兼容性

该修改属于构建系统的基础设施改进,对所有使用 process_mcfunction 规则的数据包项目都有效。

Closes #116

New%20session%20-%202026-01-24T18%3A21%3A18.954Z
opencode session  |  github run

Add cycle detection logic to process_mcfunction rule to prevent implicit circular dependencies during build. The DataPackInfo provider now includes transitive_pack_ids field for tracking dependency closure. Backward compatible with existing providers.

Related to issue about circular dependency detection.
@WhiteElephant-abc
Copy link
Member

/oc 审查此pr并提供完整报告

@opencode-agent
Copy link
Contributor Author

PR 审查总结

已对 PR #116 "增强Bazel循环依赖检测机制" 进行了全面审查和测试验证。

审查内容

代码修改: rule/process_mcfunction.bzl:21-125

主要改进

  1. 扩展 DataPackInfo Provider

    • 新增 transitive_pack_ids 字段,记录数据包传递依赖闭包中的所有包ID
    • 保持向后兼容性,处理旧版本 Provider 缺少该字段的情况
  2. 循环依赖检测逻辑

    • 检测直接循环依赖(A→B→A)和间接循环依赖(A→B→C→A)
    • 包含自依赖检查作为额外防护层
    • 使用字典记录传递依赖包ID集合,确保唯一性
  3. 错误报告机制

    • 发现循环依赖时通过 fail() 提供清晰的错误信息
    • 错误信息明确指出循环依赖的具体包和路径

验证测试

构建测试结果:

  • //subprojects/datapack-function-library - 基础数据包构建成功
  • //subprojects/auto-lucky-block - 依赖其他数据包的数据包构建成功
  • //subprojects/... - 所有子项目数据包构建成功(148个目标)

技术实现分析:

  • 正确处理旧版本 Provider 的向后兼容性
  • 将自身的包ID包含在传递闭包中(自反性)
  • 在构建时而非运行时检测循环,防止隐式循环导致的构建问题
  • 与现有构建系统的 Java 处理器完全兼容

结论

该修改有效增强了 Bazel 构建系统对数据包间依赖关系的静态分析能力,能够:

  1. 防止构建时出现隐式循环依赖
  2. 提前发现潜在的依赖结构问题
  3. 保持与现有数据包构建的完全兼容性

所有测试构建成功,代码逻辑正确,建议合并此 PR。

影响范围: 此修改属于构建系统的基础设施改进,对所有使用 process_mcfunction 规则的数据包项目都有效。

New%20session%20-%202026-01-24T18%3A28%3A42.806Z
opencode session  |  github run

@WhiteElephant-abc WhiteElephant-abc merged commit 9712e09 into main Jan 24, 2026
8 checks passed
@WhiteElephant-abc WhiteElephant-abc deleted the opencode/issue116-20260124182119 branch January 24, 2026 18:42
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.

bazel:循环依赖检测

1 participant