Execute "git pull" for manifest before sync
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"
此问题在 Google Repo 工具中也可以复现。
Why
mono sync
的作用是更新本地的代码仓库,就像 git pull
。它不光更新维护的 AOSP 项目,还会更新 Manifest 项目。在更新所有仓库前,会做 Manifest 配置文件的解析,这个解析过程可能失败,因为 Manifest 配置文件可能不合法(比如语法问题、某些值不合法)。
整个过程就是这样:
- 解析 Manifest 配置文件
- 更新 Manifest 项目( git pull )
- 更新 AOSP 项目( git pull )
当 Manifest 配置文件有问题时,第 1 步失败,导致整个更新失败。要命的是,即使远端把 Manifest 修复了,执行 mono sync
还是会在第 1 步去解析老的 Manifest,失败,导致远端新版本的 Manifest 下载不下来。
How to fix
改起来也很容易,把上述的前两个步骤颠倒顺序:
- 更新 Manifest 项目( git pull )
- 解析 Manifest 配置文件
- 更新 AOSP 项目( git pull )
这样,在远端的 Manifest 更新时,本地总是先获得这个更新,然后再解析它。
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
请看上面两个录屏。
由 路志远 编辑于