Skip to content

Execute "git pull" for manifest before sync

路志远请求将fix-sync-error-of-manifest合并到main-jh

What does this MR do and why?

Related issue: https://jihulab.com/gitlab-cn/gitlab/-/issues/3672

What

解决 mono sync 时可能出现的一个问题:Manifest 配置出现问题后,即使在远端修复了 Manifest,本地也无法通过 mono sync 恢复正常。

$ mono sync
fatal: /Users/deer/Work/mono/.repo/manifest.xml: sync-j must be greater than 0, not "0"

mono_sync_bug

此问题在 Google Repo 工具中也可以复现。

Why

mono sync 的作用是更新本地的代码仓库,就像 git pull。它不光更新维护的 AOSP 项目,还会更新 Manifest 项目。在更新所有仓库前,会做 Manifest 配置文件的解析,这个解析过程可能失败,因为 Manifest 配置文件可能不合法(比如语法问题、某些值不合法)。

整个过程就是这样:

  1. 解析 Manifest 配置文件
  2. 更新 Manifest 项目( git pull )
  3. 更新 AOSP 项目( git pull )

当 Manifest 配置文件有问题时,第 1 步失败,导致整个更新失败。要命的是,即使远端把 Manifest 修复了,执行 mono sync 还是会在第 1 步去解析老的 Manifest,失败,导致远端新版本的 Manifest 下载不下来。

How to fix

改起来也很容易,把上述的前两个步骤颠倒顺序:

  1. 更新 Manifest 项目( git pull )
  2. 解析 Manifest 配置文件
  3. 更新 AOSP 项目( git pull )

这样,在远端的 Manifest 更新时,本地总是先获得这个更新,然后再解析它。

mono_sync_fix2

Screenshots or screen recordings

Screenshots are required for UI changes, and strongly recommended for all other merge requests.

How to set up and validate locally

请看上面两个录屏。

路志远 编辑于

合并请求报告