Gerrit 中的依赖项更改

Fuchsia 项目包含许多单独的代码库。为了更轻松地进行跨代码库更改,Fuchsia 的 Gerrit 主机支持声明不同代码库中更改之间的依赖关系。在提交前测试和提交更改期间,系统会考虑依赖项。

用法

如需声明某个 CL 对另一个 CL 的依赖关系,请在提交消息中添加 Depends-on 页脚。一个 CL 可以有多个依赖项,涵盖不同的代码库和 Gerrit 主机。

格式:

[foo] Do something

Depends-on: Idc82d1483b4be8480aaa87bb48af8d03cfa45858
Change-Id: Ibbf13ab7de7e4444a2dc1f52f3cad97e76c7721d

拼写为 Depends-On(“o”大写)也是可以接受的。

规范

  • 每个 Depends-on 页脚的值都必须是 Gerrit 更改 ID。系统仅接受更改 ID,不接受整数更改编号。
  • 如果依赖项位于与当前 CL 不同的 Gerrit 主机上,则必须将该主机指定为前缀(例如,turquoise-internal:I9916ccaa4b95b6e9babdee33014fa6bd3d478f2e)。
  • Depends-on 页脚必须位于提交消息的最后一个段落中,且 Depends-onChange-Id 页脚之间不得有空行。
  • Depends-on 页脚区分大小写,只有在以 Depends-onDepends-On 形式大写时才会被识别。
  • 如果 Depends-on 页脚引用了不存在的 CL,则系统会向该 CL 添加一条注释。

行为和与基础设施的互动

  • 提交阻塞:具有 Depends-on 页脚的 CL 在其所有依赖项提交之前都无法提交,此时“CL 依赖项检查器”机器人将投票 Dependencies-Satisfied +1,从而使该 CL 可提交。
  • 提交前测试:为了更轻松地进行测试,如果 CL A 依赖于 CL B,那么在 CL A 的提交前测试中,CL B 也会被修补到结账中。Depends-on 页脚也会以递归方式处理,以便遵循传递性依赖项。
  • 自动提交:如果 CL 上传者使用 Fuchsia 的自动提交功能,此系统将发挥最佳效果。如果启用了自动提交功能,并且 CL 链包含 Depends-on 页脚,那么这些 CL 将按正确的顺序提交,无需人工干预。

循环依赖关系(原子更改)

如需使用循环依赖项,请执行以下操作:

  1. 上传两个带有 Depends-on 页脚且相互引用的 CL。
  2. 获取这两个 CL 的必要审批。
  3. 准备好提交这两个 CL 后,请在它们上设置 Fuchsia-Auto-Submit +1

CL 依赖项检查器机器人将负责其余工作,对这两个 CL 进行预提交试运行,并在试运行通过后同时批准这两个 CL。

然后,自动提交功能将提交 CL,而滚入到 integration.git 中的滚动器将以单个提交的形式滚动 CL。